为清楚起见,我将总结此答案中的一些建议。首先,我的猜测是问题实际上是 Kos 所描述的问题,而且我认为它发生的频率比您预期的要多。拨打两个电话time.strftime
(实际上是四个,但其中两个只是用于打印)意味着您在后台拨打了两个(四个)电话time.localtime
,并且由于您每 30 秒检查一次,因此很有可能如果您完成非常接近精确的一分钟,您最终会得到合理地跨越 10:00 小时的值。这就是我要解决的方法:
while True:
t = time.localtime()
if t[3:5] == (9, 0): # Compare (hour, day) numerically
print time.strftime("Starting at: %H:%M", t)
worker1.startThread()
worker2.startThread()
time.sleep(get_nap_length())
else:
time.sleep(59) # No need to sleep less than this, even being paranoid.
def get_nap_length():
'''Returns approximate number of seconds before 9:00am tomorrow.
Probably implementing this would be easiest with the datetime module.'''
get_nap_length
如果您愿意,我会将实施留给您。为了安全起见,我会让它返回明天早上 8:58 之前的秒数。实现这一点将减少您通过循环的“无用”次数,从而减少您以某种方式出错的机会。请注意,如果您不执行此操作,您还需要else
从我上面提供的代码中删除 ,否则您可能会发现自己在 9:01 到来之前开始worker1
了worker2
很多次。
最后,系统调度程序绝对值得一看,因为正如人们所说,让操作系统处理这些东西会更好。Windows 使用本机功能(管理工具下的任务计划程序)使计划任务相当容易。我不知道*nix,但我相信它不会那么糟糕。