在Tornado中安排定期后台函数调用的最佳解决方案是什么?我考虑使用tornado.ioloop.PeriodicCallback,如here所述。 spawn_callback可以用于this之类的调度吗?我想要实现的是一个简单的服务器,除了其他职责之外,还定期从本地网络中的系统中提取信息。
答案 0 :(得分:2)
PeriodicCallback
可能是最简单的解决方案,只要您不必担心任务运行时间超过预定时间的情况。
@gen.coroutine
def refresh()
resp = yield AsyncHTTPClient().fetch(url)
...
def main():
...
PeriodicCallback(refresh, 3600).start()
...
如果你担心超支,我可能会将整个事情包裹起来:
@gen.coroutine
def refresh_loop(interval=3600):
next_time = IOLoop.current().time()
while True:
next_time += interval
yield refresh()
while next_time <= IOLoop.current().time():
next_time += interval
yield gen.Task(IOLoop.current().call_at, next_time)