با استفاده از concurrent.futures در پایتون، برنامهای بنویسید که فهرستی از محاسبات سنگین (مثلاً محاسبهی فاکتوریل یا توابع عددی روی اعداد بزرگ) را بهصورت موازی اجرا کند و زمان اجرا را با حالت متوالی مقایسه کند.
3.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:05 0.0
برای حل این مسئله از concurrent.futures استفاده کنید؛ برای کارهای CPU-bound از ProcessPoolExecutor و برای I/O-bound از ThreadPoolExecutor بهره ببرید. لیستی از ورودیها را به executor.map بدهید یا با submit و as_completed نتایج را جمعآوری کنید و زمان اجرای موازی و متوالی را با time.perf_counter اندازهگیری کنید؛ تعداد workers را حدود os.cpu_count() تنظیم کنید تا از استفاده بیش از حد منابع جلوگیری شود. نکات: برای سیستمهای real-time به محدودیتهای زمانی و مدیریت منابع توجه کنید و از بلوکه کردنهای طولانی اجتناب کنید؛ در زمینهی HPC کارها را به بخشهای بزرگتر تقسیم (chunk) و از اشتراکگذاری وضعیت خودداری کنید و در صورت نیاز از کتابخانههای عددی مثل numpy برای بهینهسازی استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
در محاسبات CPU-bound از ProcessPoolExecutor استفاده کنید و ThreadPoolExecutor را فقط برای کارهای IO-bound بهکار برید. ورودیها را با executor.map به صورت توزیعشده اجرا کنید یا با submit و as_completed نتایج را جمعآوری کنید و زمان اجرا را با time.perf_counter با نسخهٔ متوالی مقایسه کنید. تعداد workers را برابر با os.cpu_count() یا کمی کمتر نگه دارید تا از اشغال بیش از حد منابع جلوگیری شود و در HPC به تقسیم کار به chunkهای بزرگتر فکر کنید. برای سیستمهای real-time به محدودیتهای زمان پاسخ و مدیریت منابع توجه کنید و در صورت لزوم از کتابخانههای عددی مانند numpy برای بهینهسازی استفاده کنید.
گزارش