唤醒龙卷风中的睡眠背景方法

时间:2015-10-29 14:37:10

标签: python tornado

在我的龙卷风服务器中,我有一个定期运行的后台进程。我按照建议将其实现为永无止境的循环:

@tornado.gen.coroutine
def background_loop():
   while True:
      do_something()
      yield tornado.gen.sleep(60)

(另外我打电话)

ioloop.spawn_callback(background_loop)

现在我的问题 - 有时我想触发后台循环的立即运行。问题是,我不能将其中两个并行运行,因为代码假定一次只运行一个循环。

我想知道,有没有办法“唤醒”我的背景循环?

我当前的hack是我实现了一些锁定,启动第二次运行一次迭代的background_loop会窃取锁定,如果无法获取锁定,主循环将跳过迭代。感觉它只是唤醒主要方法会更简单...

THX!

1 个答案:

答案 0 :(得分:1)

最简单的答案是使用Queue:而不是gen.sleep(),使用Queue.get超时。超时将定期触发,或者您可以通过在队列中放置一个值来立即将其唤醒。