با استفاده از 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 برای بهینه‌سازی استفاده کنید.

توسط پژوهشگر در 220 روز قبل ساعت 02:05
دسته بندی ها: Python Python for beginner
reyhaneh در 220 روز قبل ساعت 11:02

در محاسبات CPU-bound از ProcessPoolExecutor استفاده کنید و ThreadPoolExecutor را فقط برای کارهای IO-bound به‌کار برید. ورودی‌ها را با executor.map به صورت توزیع‌شده اجرا کنید یا با submit و as_completed نتایج را جمع‌آوری کنید و زمان اجرا را با time.perf_counter با نسخهٔ متوالی مقایسه کنید. تعداد workers را برابر با os.cpu_count() یا کمی کمتر نگه دارید تا از اشغال بیش از حد منابع جلوگیری شود و در HPC به تقسیم کار به chunkهای بزرگ‌تر فکر کنید. برای سیستم‌های real-time به محدودیت‌های زمان پاسخ و مدیریت منابع توجه کنید و در صورت لزوم از کتابخانه‌های عددی مانند numpy برای بهینه‌سازی استفاده کنید.

گزارش

1 پاسخ

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

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