با استفاده از asyncio در پایتون، برنامهای بنویسید که همزمان N وظیفهی شبیهسازی I/O (با asyncio.sleep و یک محاسبهی ساده) را اجرا کرده، نتایج را جمعآوری کند و وظایفی را که بیش از یک تایماوت مشخص طول میکشند لغو نماید.
13.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:39 0.0
برای حل، از async def برای تعریف workerها استفاده کنید که ابتدا await asyncio.sleep(...) انجام دهند و سپس یک محاسبهی ساده برگردانند؛ برای اجرای همزمان از asyncio.create_task یا asyncio.gather بهره ببرید و برای اعمال محدودیت زمانی از asyncio.wait_for یا بررسی زمان با time.perf_counter و متد cancel() روی تکتک taskها استفاده کنید. نکتهها: از asyncio.run برای راهاندازی loop استفاده کنید، هنگام کنسل کردن وظایف استثناء asyncio.CancelledError را مدیریت کنید، و اگر محاسبات سنگین CPU-bound دارید به جای asyncio از concurrent.futures.ProcessPoolExecutor یا loop.run_in_executor برای کاربردهای نزدیک به HPC استفاده کنید — تایماوتها شباهت به deadline در سیستمهای بلادرنگ دارند.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای مدیریت همزمانی، از asyncio.sleep برای شبیهسازی I/O استفاده کنید و از async def و gather یا create_task بهره ببرید. برای رعایت تایماوتها، از asyncio.wait_for یا بررسی زمان با time.perf_counter استفاده کنید و وظایف طولانی را با cancel() لغو کنید و حتماً asyncio.CancelledError را در هر وظیفه مدیریت کنید. نکتهٔ مهم اینکه محاسبههای CPU-bound بهتر است به جای asyncio از ProcessPoolExecutor یا loop.run_in_executor استفاده شود تا از انعطافپذیری و ایمنی در برابر لغو بهره ببرید. استفاده از asyncio.run برای راهاندازی حلقه مناسب است و وقتی میخواهید همزمانی با محدودیت لحظهای انجام شود، این الگو به خوبی کار میکند.
گزارش