我正在尝试安排一个重复事件在Python 3中每分钟运行一次。
我看过sched.scheduler
类,但我想知道是否还有另一种方法。我听说有人提到我可以为此使用多个线程,我不介意这样做。
我基本上是在请求一些JSON,然后解析它。它的值(value)会随着时间而变化。
要使用sched.scheduler
,我必须创建一个循环以请求它安排偶数运行一小时:
scheduler = sched.scheduler(time.time, time.sleep)
# Schedule the event. THIS IS UGLY!
for i in range(60):
scheduler.enter(3600 * i, 1, query_rate_limit, ())
scheduler.run()
还有什么其他方法可以做到这一点?
最佳答案
您可以使用 threading.Timer
,但是它也可以安排一次性事件,类似于调度程序对象的.enter
方法。
将一次性调度程序转换为周期性调度程序的正常模式(使用任何语言)是使每个事件以指定的时间间隔重新进行调度。例如,对于sched
,我不会像您正在使用的那样使用循环,而是像这样:
def periodic(scheduler, interval, action, actionargs=()):
scheduler.enter(interval, 1, periodic,
(scheduler, interval, action, actionargs))
action(*actionargs)
并通过电话发起整个“永久定期计划”
periodic(scheduler, 3600, query_rate_limit)
或者,我可以使用
threading.Timer
而不是scheduler.enter
,但是模式非常相似。如果您需要更精细的版本(例如,在给定的时间或在某些条件下停止定期重新安排时间),那么添加一些额外的参数就不太难了。
关于python - 安排Python 3中的重复事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2398661/