我有一個工作單位我希望每N秒發生一次.如果我使用簡單化
minute = 60
while True:
doSomeWork()
time.sleep(minute)
取決于doSomeWork()花費的時間,實際循環周期將是一分鐘加上那個時間.如果doSomeWork()所花費的時間不是確定性的,則工作周期更加難以預測.
我想做的就是這樣
minute = 60
start = time.process_time() #? i can imagine using this, but maybe there's something better?
while True:
doSomeWork()
start += minute
sleep_until(start) #? this is the function I'm in search of
(我正在使用python 3.3)
更新:
在Linux / OSX上,我可以使用itimer from signal來做我正在尋找的東西:
import signal
import datetime
def tick(_, __):
# doSomeWork()
print(datetime.datetime.now())
signal.setitimer(signal.ITIMER_REAL, 60, 60)
signal.signal(signal.SIGALRM, tick)
while True:
signal.pause()
看起來為python3.4開發的郁金香東西也會讓這很容易.
解決方法:
sleep_until(timestamp)基本上是time.sleep(timestamp – time.time()).
你的代碼實際上是很好的(確保你沒有通過負面時間睡覺仍然是一個好主意):
import time
minute = 60
next_time = time.time()
while True:
doSomeWork()
next_time += minute
sleep_time = next_time - time.time()
if sleep_time > 0:
time.sleep(sleep_time)
我個人會制作一個60秒間隔時間戳的發生器并使用它:
import time
import itertools
minute = 60
for next_time in itertools.count(time.time() + minute, minute):
doSomeWork()
sleep_time = next_time - time.time()
if sleep_time > 0:
time.sleep(sleep_time)
標簽:python,python-3-x