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

توسط پژوهشگر در 201 روز قبل ساعت 03:39
دسته بندی ها: Python Python for beginner
reyhaneh در 201 روز قبل ساعت 05:43

برای مدیریت هم‌زمانی، از 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 برای راه‌اندازی حلقه مناسب است و وقتی می‌خواهید هم‌زمانی با محدودیت لحظه‌ای انجام شود، این الگو به خوبی کار می‌کند.

گزارش

1 پاسخ

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

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