python - loop at exact time intervals

2020-06-26 04:18发布

I want to run a piece of code at exact time intervals (of the order of 15 seconds) Initially I used time.sleep(), but then the problem is the code takes a second or so to run, so it will get out of sync.

I wrote this, which I feel is untidy because I don't like using while loops. Is there a better way?

import datetime as dt
import numpy as np

iterations = 100
tstep = dt.timedelta(seconds=5)
for i in np.arange(iterations):
    startTime = dt.datetime.now()
    myfunction(doesloadsofcoolthings)
    while dt.datetime.now() < startTime + tstep:
        1==1

3条回答
混吃等死
2楼-- · 2020-06-26 04:49

Ideally one would use threading to accomplish this. You can do something like

import threading
interval = 15

def myPeriodicFunction():
    print "This loops on a timer every %d seconds" % interval

def startTimer():
    threading.Timer(interval, startTimer).start()
    myPeriodicFunction()

then you can just call

startTimer()

in order to start the looping timer.

查看更多
Explosion°爆炸
3楼-- · 2020-06-26 04:53

You can use a simple bash line:

watch -n 15m python yourcode.py
查看更多
Deceive 欺骗
4楼-- · 2020-06-26 05:01

Consider tracking the time it takes the code to run (a timer() function), then sleeping for 15 - exec_time seconds after completion.

start = datetime.now()
do_many_important_things()
end = datetime.now()

exec_time = end - start
time.sleep(15-exec_time.total_seconds())
查看更多
登录 后发表回答