আপনার ক্রোনটব নির্দিষ্ট করতে আপনি কেবলমাত্র পাইথন আর্গুমেন্ট পাসিং সিনট্যাক্স ব্যবহার করতে পারেন। উদাহরণস্বরূপ, ধরুন আমরা কোনও ইভেন্ট ক্লাসটি নীচের হিসাবে সংজ্ঞায়িত করেছি:
from datetime import datetime, timedelta
import time
# Some utility classes / functions first
class AllMatch(set):
"""Universal set - match everything"""
def __contains__(self, item): return True
allMatch = AllMatch()
def conv_to_set(obj): # Allow single integer to be provided
if isinstance(obj, (int,long)):
return set([obj]) # Single item
if not isinstance(obj, set):
obj = set(obj)
return obj
# The actual Event class
class Event(object):
def __init__(self, action, min=allMatch, hour=allMatch,
day=allMatch, month=allMatch, dow=allMatch,
args=(), kwargs={}):
self.mins = conv_to_set(min)
self.hours= conv_to_set(hour)
self.days = conv_to_set(day)
self.months = conv_to_set(month)
self.dow = conv_to_set(dow)
self.action = action
self.args = args
self.kwargs = kwargs
def matchtime(self, t):
"""Return True if this event should trigger at the specified datetime"""
return ((t.minute in self.mins) and
(t.hour in self.hours) and
(t.day in self.days) and
(t.month in self.months) and
(t.weekday() in self.dow))
def check(self, t):
if self.matchtime(t):
self.action(*self.args, **self.kwargs)
(দ্রষ্টব্য: পুরোপুরি পরীক্ষিত নয়)
তারপরে আপনার ক্রোনটবটি সাধারণ অজগর সিনট্যাক্সে হিসাবে নির্দিষ্ট করা যেতে পারে:
c = CronTab(
Event(perform_backup, 0, 2, dow=6 ),
Event(purge_temps, 0, range(9,18,2), dow=range(0,5))
)
এইভাবে আপনি পাইথনের আর্গুমেন্ট মেকানিক্সের সম্পূর্ণ ক্ষমতা পাবেন (অবস্থানিক এবং কীওয়ার্ড আরোগুলির মিশ্রণ করুন এবং সপ্তাহ এবং মাসের নামের জন্য প্রতীকী নাম ব্যবহার করতে পারেন)
ক্রোনটব ক্লাসটি কেবলমাত্র মিনিট ইনক্রিমেন্টে ঘুমানো এবং প্রতিটি ইভেন্টে কলিং চেক () হিসাবে সংজ্ঞায়িত হবে। (দিবালোকের সঞ্চয় সময় / সময় অঞ্চলগুলি সম্পর্কে সতর্ক থাকার জন্য সম্ভবত কিছু সূক্ষ্মতা রয়েছে)। এখানে একটি দ্রুত বাস্তবায়ন:
class CronTab(object):
def __init__(self, *events):
self.events = events
def run(self):
t=datetime(*datetime.now().timetuple()[:5])
while 1:
for e in self.events:
e.check(t)
t += timedelta(minutes=1)
while datetime.now() < t:
time.sleep((t - datetime.now()).seconds)
কয়েকটি বিষয় লক্ষণীয়: পাইথনের সপ্তাহের দিনগুলি / মাসগুলি শূন্য সূচীযুক্ত (ক্রোনের বিপরীতে) হয় এবং এই পরিসীমাটি সর্বশেষ উপাদানটিকে বাদ দেয়, সুতরাং "1-5" এর মতো বাক্য গঠনটি পরিসীমা (0,5) হয়ে যায় - অর্থাৎ [0,1,2, 3,4]। আপনি যদি ক্রোন বাক্য গঠনটি পছন্দ করেন তবে এটি বিশ্লেষণ করা খুব বেশি জটিল হবে না।