试图弄清楚如何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()
Run Code Online (Sandbox Code Playgroud)
我预计它会每2秒或每3秒触发一次,具体取决于龙卷风是否等到完成以安排下一个事件.但是,我得到了这个:
3.00190114975
6.00296115875
10.0029530525
14.0029621124
18.0029540062
22.0050959587
26.0040180683
30.005161047
34.0053040981
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
睡觉,即使在"背景"PeriodicCallback中,在龙卷风应用程序中也不是一个好主意,因为它会阻止IOLoop并且可以阻止它适当地安排事情.如果您正在使用Tornado,则需要使用非阻塞等效项替换所有长阻塞调用(或将其移至其他线程).用IOLoop.add_timeout替换睡眠,用IOStream或其他异步库等进行网络操作.
归档时间: |
|
查看次数: |
6196 次 |
最近记录: |