意外的tornado.ioloop.PeriodicCallback行为

2024-02-26

试图弄清楚如何PeriodicCallback已经安排好了,我写了这个脚本:

import time
import tornado.ioloop

t0 = time.time()

def foo():
    time.sleep(1)
    print(time.time() - t0)

tornado.ioloop.PeriodicCallback(foo, 2000).start()
tornado.ioloop.IOLoop.instance().start()

我预计它每 2 秒或每 3 秒触发一次,具体取决于龙卷风是否等到完成才能安排下一个事件。但是,我得到了这个:

3.00190114975
6.00296115875
10.0029530525
14.0029621124
18.0029540062
22.0050959587
26.0040180683
30.005161047
34.0053040981

这里发生了什么?


即使在“后台”PeriodicCallback 中睡眠,在龙卷风应用程序中也绝不是一个好主意,因为它会阻塞 IOLoop 并可能阻止它适当地调度事情。如果您使用 Tornado,则需要将所有长阻塞调用替换为非阻塞等效项(或将它们移至其他线程)。将睡眠替换为 IOLoop.add_timeout,将网络操作替换为 IOStream 或其他异步库等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

意外的tornado.ioloop.PeriodicCallback行为 的相关文章

随机推荐