带超时的POST请求的Python Tornado Badyielder错误
我试图为Python Tornado服务器编写一个post请求,该服务器在向客户端发送响应之前会休眠一秒钟。服务器每分钟必须处理许多此类post请求。以下代码无法工作,因为带超时的POST请求的Python Tornado Badyielder错误,python,tornado,yield,Python,Tornado,Yield,我试图为Python Tornado服务器编写一个post请求,该服务器在向客户端发送响应之前会休眠一秒钟。服务器每分钟必须处理许多此类post请求。以下代码无法工作,因为BadYieldError:生成了未知对象 服务器将接收post请求,等待一秒钟,然后返回结果而不阻塞其他请求。这是Python2.7。如何解决这个问题?谢谢 要么使用回调,要么使用“收益”,而不是两者都使用。所以你可以做: @asynchronous def post(self): IOLoop.instance()
BadYieldError:生成了未知对象
服务器将接收post请求,等待一秒钟,然后返回结果而不阻塞其他请求。这是Python2.7。如何解决这个问题?谢谢 要么使用回调,要么使用“收益”,而不是两者都使用。所以你可以做:
@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.
这两个都是阻塞的(谢谢你的尝试。你知道一种不阻塞的方法吗?让我重申一下……你知道为什么这段代码会阻塞吗?为什么你认为它会阻塞?你可能会碰到一个“带两个选项卡的浏览器”明白了:我在用ab和wrk练习日志时观察日志记录。
@gen.coroutine
def post(self):
yield gen.sleep(1)
self.write("{}")
# Tornado calls self.finish when coroutine exits.