آموزش ماژول threading – کلاس Timer

Please login to bookmark Close

کلاس Timer

با استفاده از این کلاس می‌توان ترد ها را به نحوی تعریف کرد که با تاخیر اجرا شوند.

from threading import Timer

def say_hi(name):
    print('hi', name)

Timer(3, say_hi, args=('mmreza', )).start()

در تکه کد بالا، تابع say_hi پس از ۳ ثانیه اجرا خواهد شد.

برای لغو اجرا، می‌توانید قبل از اجرا از متد cancel استفاده کنید. در غیر اینصورت متوقف نمی‌شود. به مثال زیر توجه کنید.

from threading import Timer

def say_hi(name):
    print('hi', name)

say_hi_after_3_seconds = Timer(3, say_hi, args=('mmreza', ))
say_hi_after_3_seconds.start()
say_hi_after_3_seconds.cancel()

موارد استفاده

برخی از کاربرد های Timer به شرح زیر است:

  1. اجرای وظایف به تأخیر افتاده
    • گاهی اوقات نیاز دارید تا یک عملیات را بعد از گذشت مدت زمانی مشخص اجرا کنید. مثلاً ارسال یادآوری بعد از مدت زمان معین یا انجام عملیات پاکسازی حافظه.
  2. زمان‌بندی وظایف دوره‌ای
    • گرچه Timer برای وظایف تک‌باره طراحی شده است، می‌توان از آن برای زمان‌بندی وظایف دوره‌ای نیز استفاده کرد. با اجرای دوباره تایمر در انتهای تابع، می‌توانید یک عملکرد تکراری ایجاد کنید.
  3. ارسال اعلان‌ها و یادآوری‌ها
    • می‌توانید از تایمر برای ارسال اعلان‌ها و یادآوری‌ها پس از مدت زمان مشخصی استفاده کنید. مثلاً یادآوری به کاربر برای انجام یک کار خاص بعد از گذشت مدت زمان معین.
  4. انجام عملیات با تاخیر در شبکه
    • در برخی پروتکل‌های شبکه نیاز است تا پس از مدت زمان مشخصی، عملیاتی انجام شود. مثلاً در پروتکل‌های timeout یا retry.
  5. مدیریت زمان‌بندی در بازی‌ها
    • در بازی‌ها، تایمرها می‌توانند برای انجام عملیات خاصی مانند ایجاد یک رویداد، تولید یک دشمن جدید، یا افزایش امتیاز بازیکن پس از مدت زمان معین استفاده شوند.
  6. کنترل ربات‌ها و دستگاه‌های اتوماسیون
    • در سیستم‌های کنترل صنعتی یا رباتیک، تایمرها می‌توانند برای زمان‌بندی دقیق اجرای عملیات و توالی‌های کاری مورد استفاده قرار گیرند.

مثال‌های کاربردی

ارسال یادآوری به کاربر

import threading

def send_reminder():
    print("It's time to take a break!")

# ارسال یادآوری بعد از 3600 ثانیه (1 ساعت)
reminder_timer = threading.Timer(3600, send_reminder)
reminder_timer.start()

زمان‌بندی پاکسازی موقت حافظه

import threading

def cleanup_cache():
    print("Cleaning up cache...")

# پاکسازی حافظه موقت بعد از 600 ثانیه (10 دقیقه)
cache_cleanup_timer = threading.Timer(600, cleanup_cache)
cache_cleanup_timer.start()

اطلاع رسانی به کاربر

import time
from threading import Thread, Timer

def task(name):
    print(f'task {name} started')
    time.sleep(5)
    print(f'task {name} finished')

def check_thread_status(thread):
    if thread.is_alive():
        print(f"{thread.name} is still running! please wait ...")

t1 = Thread(target=task, args=(1, ))
timer = Timer(3, check_thread_status, args=(t1, ))

t1.start()
timer.start()

در هر یک از این مثال‌ها، Timer به شما این امکان را می‌دهد که عملیات خاصی را بعد از مدت زمان مشخصی اجرا کنید، بدون اینکه نیاز به حلقه‌های پیچیده یا مدیریت دستی زمان داشته باشید.

مقایسه Timer با sleep

به دلیل شباهت های Timer و sleep گاهی ممکن است هنگام استفاده از آن‌ها دچار سردرگمی شوید. اینجا باید دقت داشته باشید که Timer برای اجرای یک ترد با تاخیر به کار می‌رود ولی sleep برای ایجاد یک وقفه هنگام اجرای یک ترد استفاده می‌شود.

اجرای تردی که با Timer به تاخیر افتاده را قبل از اجرا شدنش می‌توان لغو کرد اما اجرای تردی که در آن برای ایجاد وقفه از sleep استفاده شده را نمی‌توان به راحتی لغو کرد.

Please login to bookmark Close
پیشرفت شما در «دوره آموزش کانکارنسی در پایتون» (32%)
نظرات

دیدگاهتان را بنویسید

32%
پیشرفت
فهرست مطالب

تمرین

این قسمت تمرین ندارد!

پاسخ تمرین ها

هنوز برای تمرین‌های این قسمت پاسخی ثبت نشده است!

اشتراک گذاری

چرا بهتره از فیلترشکن استفاده کنید؟

من همه ویدئو ها و پادکست های کُدباز رو توی یوتیوب و ساندکلود و پلتفرم هایی آپلود می‌کنم که اغلب فیلتر هستند.

اغلب آموزش‌ها ویدئو و پادکست دارند. پس اگر می‌خواهید از محتوای سایت بیشترین استفاده رو ببرید نیاز به فیلتر شکن دارید.

توجه داشته باشید که برای خرید از فروشگاه بهتره فیلتر شکن رو خاموش کنید.

تنظیمات

انتخاب زبان
تغییر تم