Timer কী?
threading.Timer হলো Thread সাবক্লাস যা নির্দিষ্ট সময় পর একটি ফাংশন একবার এক্সিকিউট করে। শিডিউলড টাস্কের জন্য আদর্শ।
সিনট্যাক্স
threading.Timer(interval, function, args=None, kwargs=None)
interval— সেকেন্ডে বিলম্ব (ফ্লোট)function— কলব্যাক ফাংশনargs— পজিশনাল আর্গুমেন্টস (টাপল)kwargs— কিওয়ার্ড আর্গুমেন্টস (ডিক্ট)
বেসিক উদাহরণ
import threading
def my_timer():
print("Python Program")
print("Bye")
timer = threading.Timer(3.0, my_timer)
timer.start()
# আউটপুট:
# Bye
# (৩ সেকেন্ড পর)
# Python Program
টাইমার ক্যান্সেল করা
import threading
def my_timer():
print("Python Program")
timer = threading.Timer(3.0, my_timer)
timer.start()
print("Cancelling timer...")
timer.cancel() # ৩ সেকেন্ডের আগে ক্যান্সেল করলে রান হবে না
print("Bye")
# আউটপুট:
# Cancelling timer...
# Bye
রিপিটিং টাইমার (Recurring Timer)
Timer একবারই রান করে। বারবার রান করার জন্য রিকার্শিভ Timer বা sched মডিউল ব্যবহার করুন।
import threading
def recurring_timer(interval, func, *args, **kwargs):
def wrapper():
func(*args, **kwargs)
# আবার শিডিউল
threading.Timer(interval, wrapper).start()
# প্রথমবার শুরু
threading.Timer(interval, wrapper).start()
# ব্যবহার
def print_hello():
print("Hello!")
recurring_timer(2.0, print_hello)
# প্রতি ২ সেকেন্ডে "Hello!" প্রিন্ট হবে
# বন্ধ করতে প্রোগ্রাম টার্মিনেট করুন বা ফ্ল্যাগ ব্যবহার করুন
সাবধানতা
- Timer থ্রেড ডেমন (daemon) ডিফল্টে False, তাই প্রোগ্রাম টাইমার রান হওয়া পর্যন্ত এক্সিট করবে না।
- ডেমন থ্রেড চাইলে:
timer.daemon = Trueসেট করুনstart()-এর আগে। - এক্সেপশন হ্যান্ডলিং: Timer-এ এক্সেপশন সাইলেন্টলি ফেইল হয়। wrapper ফাংশনে try/except ব্যবহার করুন।
বিকল্প: sched মডিউল
import sched, time
scheduler = sched.scheduler(time.time, time.sleep)
def task(name):
print(f"Task {name} at {time.ctime()}")
scheduler.enter(2, 1, task, ('A',))
scheduler.enter(5, 1, task, ('B',))
scheduler.run()