با استفاده از asyncio در پایتون یک برنامه بنویسید که سه حسگر شبیهسازیشده را بهصورت همزمان با فواصل 1، 2 و 3 ثانیه بخواند، هر خواندن را همراه با زمان دقیق (timestamp) در یک فایل لاگ ثبت کند و پس از 10 ثانیه اجرا را بهصورت منظم متوقف نماید.
3.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:45 0.0
برای حل این مسئله از ماژول asyncio استفاده کنید: برای هر حسگر یک تابع async تعریف کنید که در یک حلقه دورهای (با استفاده از time.monotonic برای کاهش انحراف زمانی) مقدار تصادفی یا شبیهسازیشده تولید کند، آن را با timestamp به فایل لاگ بنویسد و سپس await asyncio.sleep(interval) کند. در تابع main با asyncio.create_task هر حسگر را همزمان اجرا کنید، با await asyncio.sleep(10) مدت کل اجرا را کنترل کرده و سپس با cancel تسکها را خاتمه دهید یا از asyncio.gather برای مدیریت آنها استفاده کنید. نکات: از عملیات بلوکهکننده خودداری کنید؛ برای کارهای CPU-bound میتوانید از loop.run_in_executor استفاده کنید؛ از time.monotonic برای زمانبندی دقیق و مدیریت drift بهره ببرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای کاهش drift زمانبندی، هر حسگر از time.monotonic استفاده کند و هر بار از زمان اجرای قبلی برای محاسبه زمان دقیق انتظار بهره ببرد. اگر عملیات تولید داده یا لاگنویسی حسگرها CPU-bound است، از loop.run_in_executor یا asyncio.to_thread استفاده کنید تا از بلوکهشدن رویداد حلقه جلوگیری شود. برای توقف منظم پس از 10 ثانیه، با create_task هر حسگر را اجرا کنید و پس از await asyncio.sleep(10) آنها را با cancel خاتمه دهید و CancelledError را بهخوبی مدیریت کنید. همچنین مطمئن شوید فایل لاگ در حالت append باز است و هر نوشته با flush ذخیره میشود تا از دست رفتن دادهها جلوگیری گردد.
گزارش