在我的 Tornado 服务器中,我有一个定期运行的后台进程。我按照建议将其实现为永无止境的循环:
@tornado.gen.coroutine
def background_loop():
while True:
do_something()
yield tornado.gen.sleep(60)
(我单独打电话)
ioloop.spawn_callback(background_loop)
现在回答我的问题 - 有时我想触发后台循环的立即运行。问题是,我不能让其中两个并行运行,因为代码假设一次只运行一个循环。
我想知道,有没有办法“唤醒”我的后台循环?
我当前的黑客是我实现了一些锁,启动第二个background_loop,该循环将运行一次迭代来窃取锁,如果主循环无法获取锁,它将跳过迭代。感觉唤醒 main 方法会简单得多...
谢谢!
最佳答案
最简单的答案是使用 Queue :使用带超时功能的 Queue.get
,而不是 gen.sleep()
。超时将定期触发,或者您可以通过在队列中放入一个值来立即唤醒它。
关于python - Tornado中唤醒 sleep 后台方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33417187/