Flask默認是不支持非阻塞IO
的,表現爲:python
請求1
未完成以前,請求2
是須要等待處理狀態,效率很是低。# Flask from flask import Flask, request, g import os import sys reload(sys) sys.setdefaultencoding('utf-8') app = Flask(__name__) app.config.update(DEBUG=True) #獲取本機電腦名 myname = socket.getfqdn(socket.gethostname( )) #獲取本機ip myaddr = socket.gethostbyname(myname) myport = 8912 @app.route('/test1') def the_test1(): print "test1 print start" time.sleep(10) print "test1 print after sleep" return 'hello asyn' @app.route('/test2') def the_test2(): print "test2 print!" return 'test2 return' if __name__ == '__main__': app.run(host=myaddr,port=myport,debug=False,threaded=True) ### threaded開啓之後 不須要等隊列 threaded=True #或者 #app.run(host=myaddr,port=myport,debug=False,processes=3) ### processes=N 進程數量,默認爲1個
其中使用了Gevent 是一個 Python 併發網絡庫,它使用了基於libevent 事件循環的 greenlet 來提供一個高級同步 API。下面是代碼示例:flask
from gevent.wsgi import WSGIServer
from yourapplication import app
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
網絡
# Flask from flask import Flask, request, g import os import sys reload(sys) sys.setdefaultencoding('utf-8') # gevent from gevent import monkey from gevent.pywsgi import WSGIServer monkey.patch_all() # gevent end app = Flask(__name__) app.config.update(DEBUG=True) #獲取本機電腦名 myname = socket.getfqdn(socket.gethostname( )) #獲取本機ip myaddr = socket.gethostbyname(myname) myport = 8912 @app.route('/test1') def the_test1(): print "test1 print start" time.sleep(10) print "test1 print after sleep" return 'hello asyn' @app.route('/test2') def the_test2(): print "test2 print!" return 'test2 return' if __name__ == '__main__': http_server = WSGIServer((myaddr, myport), app) http_server.serve_forever()