Python Tornado中的计划读取操作
在Tornado中安排周期性后台函数调用的最佳解决方案是什么?如前所述,我考虑过使用tornado.ioloop.PeriodicCallback。spawn_回调可以用于调度吗?我想要实现的是一个简单的服务器,除了它的其他职责外,它还可以定期从本地网络中的系统获取信息。Python Tornado中的计划读取操作,python,tornado,Python,Tornado,在Tornado中安排周期性后台函数调用的最佳解决方案是什么?如前所述,我考虑过使用tornado.ioloop.PeriodicCallback。spawn_回调可以用于调度吗?我想要实现的是一个简单的服务器,除了它的其他职责外,它还可以定期从本地网络中的系统获取信息。PeriodicCallback可能是最简单的解决方案,只要您不必担心任务运行时间超过其预定时间 @gen.coroutine def refresh() resp = yield AsyncHTTPClient().f
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)
@gen.coroutine
def刷新_循环(间隔=3600):
next_time=IOLoop.current().time()
尽管如此:
下一次时间+=间隔
产量刷新()
下次谢谢你,本!因为您已将3600设置为间隔:我不理解链接线程中指出的~4s延迟。这是否意味着,如果我将其设置为333,间隔会有所不同,但请求数大约等于每秒3次(不是问题),或者3600是最短的可能间隔长度?3600(一小时)只是一个例子;您可以使用任何间隔,包括次秒分数。但间隔越短,越有可能出现超限问题。