با استفاده از threading.Timer در پایتون یک وظیفه دورهای پیادهسازی کنید که هر 2 ثانیه یکبار مقدار شبیهسازیشدهٔ یک سنسور را تولید کرده و آن را همراه با زمان ثبت در یک فایل لاگ کند و همچنین امکان توقف ایمن توسط کاربر را فراهم نماید.
46.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 05:47 0.0
برای حل این مسئله یک تابع تولید دادهٔ سنسور بنویسید که مقدار و زمان را آماده کند و با استفاده از threading.Lock فایل لاگ را بهصورت امن بنویسد، سپس با threading.Timer بهصورت بازگشتی یا با محاسبهٔ زمان بعدی و time.monotonic هر 2 ثانیه تابع را مجدداً زمانبندی کنید؛ از یک threading.Event یا متد cancel() برای توقف ایمن استفاده کنید تا از اجرای همزمان یا تداخل جلوگیری شود. نکات: برای جلوگیری از انحراف زمانی (drift) زمانبندی را نسبت به نقطهٔ شروع محاسبه کنید، از time.monotonic برای اندازهگیری زمان استفاده کنید، بدانید threading.Timer برای سیستمهای واقعی با نیاز دقیق زمانی مناسب نیست و در سناریوهای HPC یا محاسبات سنگین بهتر است از multiprocessing یا concurrent.futures بهره ببرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای اجرای دورهای با threading.Timer از محاسبه زمان بعدی مبتنی بر time.monotonic استفاده کنید تا انحراف زمانی (drift) کاهش یابد. نوشتن در فایل را با یک threading.Lock محافظت کنید و برای توقف ایمن یک threading.Event یا متد cancel() را بهکار ببرید تا از اجرای همزمان یا ایجاد تایمرهای تودرتو جلوگیری شود. بهتر است تابع فراخوانی را بهصورت بازگشتی با محاسبه زمان بعدی اجرا کنید (مثلاً start + n*interval) بهجای صرفاً sleep کردن. توجه داشته باشید که threading.Timer برای زمانبندی بسیار دقیق مناسب نیست و در کارهای سنگین یا حساس به تأخیر از multiprocessing، concurrent.futures یا سرویسهای زمانبندی دقیق استفاده کنید.
گزارش