tornado异步请求不起作用,我的代码有什么问题?

2024-09-30 18:14:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码:

 class AsyncTestHandler(BaseHandler):
  def testTimeOut(self, callback):
      time.sleep(20)
      callback("ok")

  @tornado.web.asynchronous
  def post(self):
      user = self.get_current_user()
      self.testTimeOut(callback=self.respones)

  def respones(self,msg):
      self.finish(msg)

我用过”@tornado.web.asynchronous公司“带回调,但请求不是异步的,怎么能id?在


Tags: 代码selfwebtimedefcallbackmsgtornado
2条回答

问题是,时间。睡觉不是异步的,所以主循环在休眠时被阻塞。对于异步运行同步代码,可以使用单独的工作线程。在

class HugeQueryHandler(BaseHandler):

    executor = tornado.concurrent.futures.ThreadPoolExecutor(5)

    @tornado.concurrent.run_on_executor
    def sleep_async(self):
        time.sleep(20)
        return

    @tornado.web.asynchronous
    @gen.engine
    def get(self):
        r = yield self.sleep_async()
        self.finish()

Tornado只使用一个进程和一个线程。它中的所有IO操作都是异步的,这并不意味着它们是并发处理的。所以,如果你在代码中的任何地方调用time.sleep(xx),那么你的Tornado进程将在这段时间内完全“停止”!在

在龙卷风中睡觉的正确方法是打电话给ioloop.add_timeout。在

tornado equivalent of delay。在

http://caisong.com/Tornado%20don't%20use%20time.sleep%20.html。在

相关问题 更多 >