Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Python 龙卷风异步产量_Python_Asynchronous_Tornado - Fatal编程技术网

Python 龙卷风异步产量

Python 龙卷风异步产量,python,asynchronous,tornado,Python,Asynchronous,Tornado,我试图理解在Tornado中实现异步操作的yield的目的,但我不清楚为什么它不执行异步操作。为了简洁起见,我跳过了导入,但是这段代码在其他方面是完整的。这就是我要做的。当用户执行http get请求时,我掷硬币。如果硬币变成正面,我会睡10秒钟,然后打印“Hello heads”。如果硬币是反面的,我会立即打印“Hello tails”。当我执行curl时,它进入睡眠状态并再次运行curl,我注意到请求已排队(即使硬币是尾部的)。我希望第二个请求在它自己的线程中得到服务,并快速返回“Hello

我试图理解在Tornado中实现异步操作的yield的目的,但我不清楚为什么它不执行异步操作。为了简洁起见,我跳过了导入,但是这段代码在其他方面是完整的。这就是我要做的。当用户执行http get请求时,我掷硬币。如果硬币变成正面,我会睡10秒钟,然后打印“Hello heads”。如果硬币是反面的,我会立即打印“Hello tails”。当我执行curl时,它进入睡眠状态并再次运行curl,我注意到请求已排队(即使硬币是尾部的)。我希望第二个请求在它自己的线程中得到服务,并快速返回“Hello Tails”。我错过了什么

class MainHandler(tornado.web.RequestHandler):
   @gen.coroutine
   def get(self):
     toss = random.choice(['H', 'T'])
     print("flipped a coin, got", toss)
     if toss == 'H':
        response = yield time.sleep(10)
        self.write("Hello Heads")
     else:
        self.write("Hello Tails")

if __name__ == "__main__":
   tornado.options.parse_command_line()
   application = tornado.web.Application([
    (r"/", MainHandler),
])
   application.listen(8888)
   tornado.ioloop.IOLoop.current().start()

time.sleep
是一种阻塞功能。当代码到达此语句时,整个服务器(事件循环)将阻塞10秒

因此,每个后续请求也会延迟到
时间。睡眠
被解决

使用异步等效的
time.sleep
-

这在Tornado文档中也提到过