在异步应用程序中休眠,不阻塞事件循环
Sleep in async application, without blocking event loop
我的一个异步测试有问题:tornado 似乎没有启动并且 运行(我得到 599s),即使它是作为固定装置启动的。我想通过执行以下操作来验证它确实是 运行:
- 开始测试
- 在请求实际发送到 tornado 之前,我希望我的代码长时间 "sleep" 以便我可以手动检查浏览器确实是 运行。
如何让 python 进入休眠状态而不阻塞异步循环?如果我这样做 time.sleep
,整个过程(以及循环)在睡眠期间没有响应。
你的两个问题都在 Tornado 的常见问题解答中得到了解答:
http://www.tornadoweb.org/en/latest/faq.html
使用yield gen.sleep(1)
等待1秒,同时让其他任务运行进入事件循环,或者使用IOLoop.current().add_timeout(1, callback)
运行一秒后回调。
不要使用您的浏览器来验证您的应用程序是否同时处理多个请求:浏览器本身可能不允许并发请求。请改用 curl
。
你可以检查你的代码你的请求方法是POST
还是PUT
,我在使用方法POST
时得到了599
响应代码但没有post一个数据,加了data
就没了。
error:
res = self.fetch('/', method='POST')
fixed:
res = self.fetch('/', method='POST', data={})
我的一个异步测试有问题:tornado 似乎没有启动并且 运行(我得到 599s),即使它是作为固定装置启动的。我想通过执行以下操作来验证它确实是 运行:
- 开始测试
- 在请求实际发送到 tornado 之前,我希望我的代码长时间 "sleep" 以便我可以手动检查浏览器确实是 运行。
如何让 python 进入休眠状态而不阻塞异步循环?如果我这样做 time.sleep
,整个过程(以及循环)在睡眠期间没有响应。
你的两个问题都在 Tornado 的常见问题解答中得到了解答:
http://www.tornadoweb.org/en/latest/faq.html
使用yield gen.sleep(1)
等待1秒,同时让其他任务运行进入事件循环,或者使用IOLoop.current().add_timeout(1, callback)
运行一秒后回调。
不要使用您的浏览器来验证您的应用程序是否同时处理多个请求:浏览器本身可能不允许并发请求。请改用 curl
。
你可以检查你的代码你的请求方法是POST
还是PUT
,我在使用方法POST
时得到了599
响应代码但没有post一个数据,加了data
就没了。
error:
res = self.fetch('/', method='POST')
fixed:
res = self.fetch('/', method='POST', data={})