我正在尝试安排一个重复事件在Python 3中每分钟运行一次。
我看过课堂,sched.scheduler但是我想知道是否还有另一种方法可以做到。我听说有人提到我可以为此使用多个线程,我不介意这样做。
sched.scheduler
我基本上是在请求一些JSON,然后解析它。它的价值会随着时间而变化。
要使用它,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调度程序对象的方法。
threading.Timer
.enter
将一次性调度程序转换为周期性调度程序的正常模式(使用任何语言)是使每个事件以指定的时间间隔重新进行调度。例如,使用时sched,我不会像您正在使用的那样使用循环,而是像这样:
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,但是模式非常相似。
scheduler.enter
如果您需要更精细的变体(例如,在给定时间或在某些条件下停止定期重新计划),那么添加一些额外的参数就不太难了。