通过 Tornado 的后台计时器 IOLoop.spawn_callback

Background timer via Tornado IOLoop.spawn_callback

我想 运行 基于 tornado 的网络应用程序中的计时器,这样它 运行 在后台并且不阻塞。

计时器完成后,必须调用特定任务,因此计时器准时完成非常重要。

理想的方法应该是什么?

我在文档中阅读了 Tornado IOLoop.spawn_callback,但我不太清楚它是否会正确运行。

我不太明白doc

中的说法

Unlike all other callback-related methods on IOLoop, spawn_callback does not associate the callback with its caller’s stack_context

如果你想运行一个特定时间后的函数,你可以使用IOLoop.call_later。像这样使用它:

IOLoop.current().call_later(5, my_func) # will call my_func 5 seconds later

def my_func():
    # do something

IOLoop.spawn_callback 用于在 IOLoop 的下一次迭代中 运行 宁 callback/function,即 - 几乎立即。您不能为 spawn_callback 添加超时。由于您想在超时后安排回调,因此 IOLoop.call_later 就是您所需要的。

在你的评论中你问了

Why according to you IOLoop.spawn_callback is not to be used?

好吧,我从来没有说过不要使用它。如果需要,您可以使用它。在这种情况下,你不需要。

所以,你什么时候需要它?当您需要几乎立即 运行 回调且没有超时时,您就可以使用 spawn_callback。但即便如此,IOLoop.add_callbackspawn_callback.

使用更广泛