具有超时的POST请求的Python Tornado BadYieldError

时间:2016-10-13 17:28:53

标签: python tornado yield

我正在尝试编写一个Python Tornado服务器的发布请求,该服务器在将响应发送回客户端之前会休眠一秒钟。服务器必须每分钟处理许多这些发布请求。由于BadYieldError: yielded unknown object <generator object get at 0x10d0b8870>

,以下代码无效
@asynchronous
def post(self):
    response = yield IOLoop.instance().add_timeout(time.time() + 1, self._process)
    self.write(response)
    self.finish()

@gen.coroutine
def _process(self, callback=None):
    callback("{}")

服务器将接收发布请求,等待一秒,然后返回结果而不阻止其他请求。这是Python 2.7。怎么解决这个?谢谢!

1 个答案:

答案 0 :(得分:1)

使用回调或&#34;产生&#34;,而不是两者。所以你可以这样做:

@asynchronous
def post(self):
    IOLoop.instance().add_timeout(time.time() + 1, self._process)

def _process(self):
    self.write("{}")
    self.finish()

或者,更好:

@gen.coroutine
def post(self):
    yield gen.sleep(1)
    self.write("{}")
    # Tornado calls self.finish when coroutine exits.