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