আমি পুরো মিনিটের পরে একই সংখ্যায় সেকেন্ডে ঘটে যাওয়া বেশিরভাগ ইভেন্টের সাথে প্রতি ঘন্টা 60 টি ইভেন্ট তৈরি করতে ব্যবহার করি:
import math
import time
import random
TICK = 60 # one minute tick size
TICK_TIMING = 59 # execute on 59th second of the tick
TICK_MINIMUM = 30 # minimum catch up tick size when lagging
def set_timing():
now = time.time()
elapsed = now - info['begin']
minutes = math.floor(elapsed/TICK)
tick_elapsed = now - info['completion_time']
if (info['tick']+1) > minutes:
wait = max(0,(TICK_TIMING-(time.time() % TICK)))
print ('standard wait: %.2f' % wait)
time.sleep(wait)
elif tick_elapsed < TICK_MINIMUM:
wait = TICK_MINIMUM-tick_elapsed
print ('minimum wait: %.2f' % wait)
time.sleep(wait)
else:
print ('skip set_timing(); no wait')
drift = ((time.time() - info['begin']) - info['tick']*TICK -
TICK_TIMING + info['begin']%TICK)
print ('drift: %.6f' % drift)
info['tick'] = 0
info['begin'] = time.time()
info['completion_time'] = info['begin'] - TICK
while 1:
set_timing()
print('hello world')
#random real world event
time.sleep(random.random()*TICK_MINIMUM)
info['tick'] += 1
info['completion_time'] = time.time()
বাস্তব অবস্থার উপর নির্ভর করে আপনি দৈর্ঘ্যের টিক্স পেতে পারেন:
60,60,62,58,60,60,120,30,30,60,60,60,60,60...etc.
তবে 60 মিনিটের শেষে আপনার 60 টি টিক্স থাকবে; এবং সেগুলির বেশিরভাগটি আপনার পছন্দ অনুযায়ী যে মুহুর্তে অফসেটে ঘটবে।
আমার সিস্টেমে আমি সংশোধনের প্রয়োজন না হওয়া পর্যন্ত এক সেকেন্ডের <1/20 তম টিপিক্যাল ড্রিফ্ট পাই।
এই পদ্ধতির সুবিধা হ'ল ক্লক ড্রিফ্টের রেজোলিউশন; আপনি যদি টিকিটের জন্য একটি আইটেম সংযোজন করার মতো কাজ করে থাকেন এবং প্রতি ঘন্টা 60 টি আইটেম সংযোজন করা আশা করেন যা সমস্যার কারণ হতে পারে। প্রবাহের জন্য অ্যাকাউন্টে ব্যর্থতা অতীতের খুব গভীরভাবে ডেটা বিবেচনা করার জন্য গড় সঞ্চার গড়ে যেমন মাধ্যমিক সূচক তৈরি করতে পারে ফলশ্রুতিতে ফলাফলের ফলস্বরূপ।