با استفاده از asyncio یک برنامه پایتون بنویسید که به‌صورت هم‌زمان سه سنسور مجازی را با دوره‌های زمانی 0.5، 1 و 2 ثانیه شبیه‌سازی کند و هر 1 ثانیه میانگین آخرین مقادیر خوانده‌شده از هر سه سنسور را چاپ کند.

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

0.0

برای حل این مسئله از coroutineهای asyncio برای هر سنسور استفاده کنید که در حلقه‌ای دوره‌ای با asyncio.sleep مقدار جدید تولید و در یک ساختار داده اشتراکی (مثلاً دیکشنری) ذخیره می‌کنند؛ برای دسترسی ایمن می‌توانید از asyncio.Lock استفاده کنید. یک coroutine جداگانه وظیفه محاسبه و چاپ میانگین را هر 1 ثانیه انجام می‌دهد. نکات: از asyncio.create_task برای اجرا هم‌زمانِ coroutineها و از asyncio.run برای راه‌اندازی لوپ استفاده کنید، از فراخوانی‌های مسدودکننده اجتناب کنید و برای شبیه‌سازی دقت زمانی (مباحث Real-Time) تا حد امکان از sleepهای غیرمسدودکننده استفاده نمایید؛ این روش در زمینه HPC به افزایش هم‌زمانی و استفاده بهتر از منابع کمک می‌کند.

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

برای حفظ دقت زمانی در شبیه‌سازی از loop.time() استفاده کنید و با asyncio.sleep غیرمسدود نقش نظم‌بخش را به‌طور دقیق ایفا کنید تا از عقب‌افتادگی جلوگیری شود. به‌جای تکیه صرف بر آخرین مقدار، نگه‌داشتن چند مقدار اخیر برای هر سنسور و محاسبه میانگین از آنها می‌تواند نویز را کاهش دهد. برای دسترسی ایمن به داده‌های مشترک از asyncio.Lock استفاده کنید و با یک coroutine جداگانه چاپ میانگین را هر یک ثانیه انجام دهید. در نهایت، وظایف را با Cancel کردن مناسب و استفاده از asyncio.run مدیریت کنید تا خروج امنی داشته باشید.

گزارش

1 پاسخ

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

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