+
 新版

tornado官网说是非阻塞的,如何用tornado来拉起flask应用,使flask支持多线程?

hawkFAN 发布于 2017/02/20 14:15
阅读 2K+
收藏 1

直接上示例:

flask应用代码如下:flask_app.py

from flask import Flask
import time
app = Flask(__name__)

@app.route('/')
def hello_world():
    result =
bingloop(10000000)
    return result

@app.route('/a')
def hi_world():
    return "hi,world"

def bigloop(number):
    for i in range(0,number):
        print i
    return "done"

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True)

tornado代码如下:

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from flask_app import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()

然后在浏览器中访问0.0.0.0:5000/会卡住,

这时再打开一个浏览器窗口访问0.0.0.0:5000/a,按理说多线程不是应该直接返回hi,world吗?  但是会一直卡住等到上一个请求结束后,才会返回。

 

tornado该如何使用来支持flask应用多线程处理呢?好疑惑

 

加载中
0
一一无念
一一无念

当然会卡住, 了解下协程与异步

 @tornado.web.asynchronous

    @tornado.gen.coroutine

0
b
bingtel

通过app.run()启动flask, 其实是单线程,一次只能处理一个请求,

0
mickelfeng
mickelfeng

函数名是这个 bigloop,调用又是这个bingloop

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部