【发布时间】:2015-04-17 06:32:46
【问题描述】:
今天,当我想让一些同步 Python 库异步运行时,它不起作用。经过一系列的测试,我发现即使yield tornado.gen.sleep(N)也能同步运行。
这是我的代码:
import time
import tornado.web
import tornado.gen
import tornado.ioloop
import os
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("test.htm")
class SleepHandler(tornado.web.RequestHandler):
def get(self):
time.sleep(2)
self.write("Good morning!")
class YSleepHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self):
yield tornado.gen.sleep(2)
self.write("Good morning!")
def main():
app = tornado.web.Application([
(r"/sleep", SleepHandler),
(r"/ysleep", YSleepHandler),
(r"/", MainHandler),
], debug=True, template_path=os.path.split(
os.path.realpath(__file__))[0])
app.listen(8888)
try:
tornado.ioloop.IOLoop.current().start()
except:
tornado.ioloop.IOLoop.current().stop()
if __name__ == "__main__":
main()
我使用下面的代码来测试异步函数是否有效(在 test.htm -- MainHandler 的模板文件中):
for(var i = 0; i < 10; i++){
$.get("/sleep");
}
for(var i = 0; i < 10; i++){
$.get("/ysleep");
}
但最后,我得到了一个意想不到的result。
怎么了?我在Python2.7和Python3.4环境下都试过了。
【问题讨论】:
标签: python asynchronous tornado