python - Tornado中唤醒 sleep 后台方法

标签 python tornado

在我的 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/

相关文章:

python - Tornado:读取上传的 CSV 文件?

python - 如何在超时的情况下取消 Tornado 中挂起的异步任务?

python - Bokeh - 模型必须仅由单个文档拥有[错误]

VsCode 中的 python 模块管理

python - 每日提及一个词

python - KeyboardInterrupt 后关闭并重置 Tornado IOLoop

python - aubio 可以用来检测仅节奏片段吗?

python - 升级 Python 包 dateutil : Could not find a version

node.js - 事件驱动服务器/应用程序的免费 PaaS 有哪些限制?

python - 使用tornado.auth.TwitterMixin 和回调URL?