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