با استفاده از multiprocessing.Process یک برنامه بنویسید که چهار فرآیند موازی بسازد و هرکدام حاصل‌ضرب اعداد یک لیست مشخص را محاسبه و نتایج را در یک multiprocessing.Queue قرار دهند و در فرآیند اصلی نتایج را جمع‌آوری و نمایش دهید.

10.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 00:49

0.0

برای حل این مسئله از ماژول multiprocessing و کلاس Process استفاده کنید: تابع worker تعریف کنید که یک زیرلیست از اعداد را می‌گیرد و حاصل‌ضرب را محاسبه کرده و در یک multiprocessing.Queue قرار می‌دهد. در بخش اصلی برنامه با استفاده از حلقه چهار Process بسازید، آنها را با start() اجرا کنید و با join() منتظر پایان‌شان بمانید، سپس نتایج را از Queue بخوانید و نمایش دهید. نکات مهم: در ویندوز حتماً از شرط if __name__ == '__main__' استفاده کنید، بار کاری را به‌طور یکنواخت تقسیم کنید و از اشتراک‌گذاری حالت mutable بین فرآیندها خودداری کنید؛ این الگو در سیستم‌های بلادرنگ و محاسبات با کارایی بالا برای موازی‌سازی وظایف مفید است.

توسط پژوهشگر در 198 روز قبل ساعت 00:49
دسته بندی ها: Python Python for beginner
reyhaneh در 198 روز قبل ساعت 00:50

وقتی با multiprocessing.Process و multiprocessing.Queue کار می‌کنید حتماً شرط if __name__ == '__main__' را رعایت کنید تا در ویندوز از ساختن فرآیندهای تودرتو جلوگیری شود و بار را به‌صورت یکنواخت با تقسیم لیست (مثلاً با numpy.array_split یا تقسیم بردستی) بین چهار فرآیند توزیع کنید. از اشتراک‌گذاری داده‌های mutable بین فرآیندها خودداری کنید و به‌جای آن از Queue برای ارسال نتایج یا در صورت نیاز از multiprocessing.Manager برای حالت مشترک امن استفاده کنید. برای جلوگیری از بلوکه‌شدن بهتر است پس از join() یا با استفاده از مقدار sentinel یا با تعیین تعداد دقیق خوانش‌ها، خواندن از Queue را مدیریت کنید. اگر دنبال سادگی و مقیاس‌پذیری هستید، بررسی cpu_count() و استفاده از Pool یا concurrent.futures.ProcessPoolExecutor می‌تواند مناسب‌تر باشد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری