periodiccallback异步函数

时间:2018-03-20 09:35:41

标签: python asynchronous parallel-processing tornado periodicity

PeriodicCallback是否确保没有并行执行?在先前触发的呼叫仍在运行时是否触发回调,或者是否确保一次只运行一个回叫?据我所知,后者是真的,但我想确定!我应该控制异步函数的时间不再是下一个periodiccallback调度程序。

例如:

如果我每5秒有一个periodiccallback并且我的功能时间有时(因为使http请求等)更长(例如7秒),我怎么能跳过" 10秒"并传递到15?只有在它发生的时候。

1 个答案:

答案 0 :(得分:0)

龙卷风文档说

  

如果回调的运行时间超过callback_time毫秒,则将跳过后续调用以恢复计划。

因此,如果我正确理解您的问题,PeriodicCallback已经完全符合您的要求如果您的回调是同步功能

如果您的回调不是同步的,那么您将需要使用锁来检查自己是否已经运行。类似的东西:

from tornado import gen, locks

lock = locks.Lock()
running = False
@gen.coroutine
def task():
    global running
    with (yield lock.acquire()):
        if running:
            return
        running = True
    try:
        yield do_something()
    finally:
        with (yield lock.acquire()):
            running = False

http://www.tornadoweb.org/en/stable/ioloop.html#tornado.ioloop.PeriodicCallback