通过 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_callback
比 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_callback
比 spawn_callback
.