在异步应用程序中休眠,不会阻塞事件循环

时间:2017-02-08 10:27:02

标签: python asynchronous tornado sleep pytest

我的异步测试有一个问题:龙卷风似乎没有启动和运行(我得到599s),即使它是作为一个夹具启动的。我想通过执行以下操作来验证它确实在运行:

  1. 开始测试
  2. 在请求实际发送到龙卷风之前,我希望我的代码能够长时间“休眠”,以便我可以手动检查浏览器龙卷风确实在运行。
  3. 如何在不阻止异步循环的情况下告诉python进入睡眠状态?如果我做time.sleep,整个过程(以及循环)在睡眠持续时间内没有响应。

2 个答案:

答案 0 :(得分:1)

在Tornado的常见问题解答中,您的两个问题都得到了解答:

http://www.tornadoweb.org/en/latest/faq.html

使用yield gen.sleep(1)等待1秒,同时让其他任务在事件循环上运行,或者使用IOLoop.current().add_timeout(1, callback)在一秒钟后运行回调。

请勿使用浏览器验证您的应用程序是否同时处理多个请求:浏览器本身可能不允许并发请求。请改用curl

答案 1 :(得分:0)

您可以检查您的代码,无论您的请求方法是POST还是PUT,当我使用方法599并且未发布时,我会收到POST响应代码数据,当我添加data时它会消失。

error: res = self.fetch('/', method='POST')

fixed: res = self.fetch('/', method='POST', data={})