【发布时间】:2012-06-23 03:25:15
【问题描述】:
在不影响主进程睡眠的情况下,tornado 中是否有等效的延迟函数命令(因此即使主线程正在处理新的函数调用,回调也会执行)
【问题讨论】:
-
不完全确定你在问什么。你能举个例子吗?
在不影响主进程睡眠的情况下,tornado 中是否有等效的延迟函数命令(因此即使主线程正在处理新的函数调用,回调也会执行)
【问题讨论】:
试试这个:
import time
from tornado.ioloop import IOLoop
from tornado.web import RequestHandler, asynchronous
from tornado import gen
class MyHandler(RequestHandler):
@asynchronous
@gen.engine
def get(self):
self.write("sleeping .... ")
self.flush()
# Do nothing for 5 sec
yield gen.Task(IOLoop.instance().add_timeout, time.time() + 5)
self.write("I'm awake!")
self.finish()
取自here。
【讨论】:
class MyHandler(RequestHandler):
@asynchronous
def get(self):
self.write("sleeping .... ")
self.flush()
IOLoop.instance().add_timeout(time.time() + 5, self._process)
def _process(self)
# Do nothing for 5 secs
self.write("I'm awake!")
self.finish()
【讨论】:
请注意,自 4.1 起,他们添加了 gen.sleep(delay) 方法。
所以
yield gen.Task(IOLoop.instance().add_timeout, time.time() + 5)
会变成
yield gen.sleep(5)
【讨论】: