0

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

例如:

如果我periodiccallback每 5 秒有一次,并且有时我的功能时间(因为发出 http 请求等)更长(例如 7 秒),我怎样才能跳过“10 秒”并传递到 15?只有当它发生时。

4

1 回答 1

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

于 2018-03-20T09:43:25.583 回答