在Tornado安排阅读操作

时间:2014-11-15 11:40:58

标签: python tornado

在Tornado中安排定期后台函数调用的最佳解决方案是什么?我考虑使用tornado.ioloop.PeriodicCallback,如here所述。 spawn_callback可以用于this之类的调度吗?我想要实现的是一个简单的服务器,除了其他职责之外,还定期从本地网络中的系统中提取信息。

1 个答案:

答案 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)