我正在尝试使用Tornado的gen.coroutine
函数进行一个简单的异步调用。这是我当前的代码:
from tornado import gen
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
@gen.coroutine
def get(self):
q = self.get_argument('query')
print q
response = yield self.process(q)
self.write(response)
@gen.coroutine
def process(self, query):
# just a long loop
for i in range(int(query)*100):
for j in range(i):
a = 10*10*10*10*10*10
return {'processed': True}
def make_app():
return tornado.web.Application([
(r"/search", MainHandler),
])
if __name__ == "__main__":
app = make_app()
port = 8888
print "listening on port: ", port
app.listen(port)
tornado.ioloop.IOLoop.current().start()
但是,它的行为不是异步的。我做错什么了?
最佳答案
您的“流程”方法只进行计算,因此它从不在“流程”运行时为Tornado的事件循环提供处理其他任务的机会。Tornado可以交叉并发网络操作,但是不能并行运行Python代码。要并行化像“process”方法这样的函数,需要多个Python子进程。
关于python - 用Tornado Python进行异步函数调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44139848/