试图弄清楚如何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(使用前将#替换为@)