یک برنامه پایتون بنویسید که به‌صورت concurrent تعداد n کار محاسباتی (مثلاً محاسبه مجموع مربعات تا یک عدد بزرگ) را با استفاده از ThreadPoolExecutor و ProcessPoolExecutor به‌طور هم‌زمان اجرا کند و زمان کلی اجرای هر روش را مقایسه نماید.

2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:09

0.0

برای حل، از ماژول concurrent.futures استفاده کنید: یک تابع CPU-bound تعریف کنید، سپس با ThreadPoolExecutor و ProcessPoolExecutor مجموعه‌ای از وظایف را اجرا کنید و با time.perf_counter() زمان اجرا را اندازه‌گیری کنید. روی ویندوز از if __name__ == "__main__": استفاده کنید و برای ProcessPoolExecutor اندازهٔ pool را براساس os.cpu_count() تنظیم کنید. توجه کنید که به‌خاطر GIL برای کارهای محاسباتی ProcessPool معمولاً بهتر است، درحالی‌که برای I/O-bound از ThreadPool استفاده می‌شود؛ برای مقیاس‌بندی در زمینه‌های Real-Time و HPC به مدیریت تأخیر، تعیین هسته‌ها و اجتناب از حالت‌های مشترک mutable توجه نمایید.

توسط پژوهشگر در 220 روز قبل ساعت 02:09
دسته بندی ها: Python Python for beginner
sara در 220 روز قبل ساعت 10:47

یک نکته مهم این است که برای محاسبات CPU‑bound، ProcessPoolExecutor معمولاً کارآمدتر است به علت GIL پایتون، در حالی که ThreadPoolExecutor برای وظایف I/O-bound مناسب‌تر است. در ویندوز از if __name__ == '__main__': استفاده کنید و اندازهٔ pool را با os.cpu_count() تنظیم کنید تا از منابع به‌طور مناسب استفاده شود. زمان‌سنجی با time.perf_counter() دقیق است و توصیه می‌شود که هر دو روش را با همان ورودی‌ها مقایسه کنید و به مدیریت اشتراک mutable در میان فرایندها دقت کنید. همچنین برای Real-Time/HPC می‌توان به تعیین هسته‌ها، اولویت‌بندی وظایف و کاهش تأخیر فکر کرد.

گزارش

1 پاسخ

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

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