Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带超时的POST请求的Python Tornado Badyielder错误_Python_Tornado_Yield - Fatal编程技术网

带超时的POST请求的Python Tornado Badyielder错误

带超时的POST请求的Python Tornado Badyielder错误,python,tornado,yield,Python,Tornado,Yield,我试图为Python Tornado服务器编写一个post请求,该服务器在向客户端发送响应之前会休眠一秒钟。服务器每分钟必须处理许多此类post请求。以下代码无法工作,因为BadYieldError:生成了未知对象 服务器将接收post请求,等待一秒钟,然后返回结果而不阻塞其他请求。这是Python2.7。如何解决这个问题?谢谢 要么使用回调,要么使用“收益”,而不是两者都使用。所以你可以做: @asynchronous def post(self): IOLoop.instance()

我试图为Python Tornado服务器编写一个post请求,该服务器在向客户端发送响应之前会休眠一秒钟。服务器每分钟必须处理许多此类post请求。以下代码无法工作,因为
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.