یک برنامه پایتون بنویسید که با استفاده از ماژول multiprocessing و multiprocessing.Manager یک لیست بزرگ از اعداد را به چند فرایند تقسیم کند، هر فرایند مجموع بخش خودش را در یک ساختار مشترک قرار دهد و در پایان مجموع کلی اعداد را چاپ کند.
5.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:05 0.0
برای حل این سوال از multiprocessing.Process برای ایجاد فرایندها و از multiprocessing.Manager() برای گرفتن یک لیست یا دیکشنری مشترک بین فرایندها استفاده کنید: آرایه را به قطعات مساوی تقسیم کنید، هر فرایند مجموع بخشش را محاسبه و نتیجه را در Manager().list() یا dict ذخیره کند، سپس با join() منتظر پایان همه فرایندها شوید و مجموع کلی را جمع بزنید. تکنولوژیها و نکات: از multiprocessing.cpu_count() برای تعیین تعداد فرایندها استفاده کنید، به مسئله pickling توجه داشته باشید زیرا دادهها بین فرایندها سریال میشوند، و برای کاربردهای HPC یا سیستمهای زمان واقعی در پروژههای بزرگتر ممکن است بخواهید به shared memory (مثل multiprocessing.Array) یا کتابخانههای تخصصیتر برای بهبود کارایی مراجعه کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکته مهم: استفاده از Manager برای ساخت لیست مشترک ساده است اما پروکسیهای آن میتواند روی کارایی تاثیر بگذارد. برای دادههای بزرگ، استفاده از multiprocessing.Array یا حافظه مشترک و نوشتن نتایج هر فرایند در ناحیه اختصاصی، کارایی بهتری میدهد. همچنین مطمئن شوید از if __name__ == '__main__' استفاده میکنید تا در ویندوز یا محیطهای spawn، فرایندها درست راهاندازی شوند. اگر هدف سرعت بیشتر است، میتوانید از Pool و map بهره ببرید، هرچند با Process و Manager هم امکانپذیر است و میتواند قابل فهمتر باشد.
گزارش