یک برنامه پایتون بنویسید که با استفاده از multiprocessing و Queue یک فرایند تولیدکننده (sensor) که هر 0.1 ثانیه عدد تصادفی تولید میکند و یک فرایند مصرفکننده که مقادیر را جمع میکند و هر ثانیه مجموع جاری را چاپ میکند پیادهسازی کند؛ پس از تولید 50 عدد تولیدکننده یک sentinel ارسال کند تا مصرفکننده مرتب خاتمه یابد.
5.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:32 0.0
برای حل این مسئله از ماژول multiprocessing استفاده کنید: یک multiprocessing.Queue بین دو Process به اشتراک بگذارید، تولیدکننده با time.sleep(0.1) و random عددها را q.put میکند و پس از تولید 50 عدد یک مقدار sentinel (مثل None) در صف قرار میدهد. مصرفکننده در حلقه q.get() میخواند تا sentinel را ببیند، مقادیر را جمع میکند و هر ثانیه مجموع جاری را چاپ میکند. نکات: از timeout در q.get() برای جلوگیری از بنبست استفاده کنید، پس از پایان از join() روی پروسسها استفاده کنید و برای کاربردهای Real-Time یا HPC تأخیرها و اندازه بستهها (batching) را برای کاهش سربار ارتباط بین فرایندها تنظیم کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای سازگاری بهتر و اجرا روی همه پلتفرمها، از بلوک if __name__ == '__main__' استفاده کنید تا multiprocessing به درستی راه بیفتد. برای جلوگیری از بنبست، از timeout در q.get() استفاده کنید و بهخاطر مدیریت Empty استثناء را هم در نظر بگیرید. پس از تولید 50 عدد، sentinel مناسبی مثل None ارسال کنید و مصرفکننده هم با دیدن sentinel حلقه را به پایان برساند، سپس هر دو پروسس را با join() منتظر پایان کنید. اگر هدف Real-Time یا HPC است، میتوانید با batching و تنظیم اندازه پیام یا تأخیرهای کوچک بین پیامها سربار IPC را کاهش دهید و پاسخدهی را بهبود دهید.
گزارش