flask請求異步執行(轉載)

Flask默認是不支持非阻塞IO的,表現爲:python

請求1未完成以前,請求2是須要等待處理狀態,效率很是低。
在flask中非阻塞實現能夠由2種:
  • 啓用flask多線程機制
# 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個 
  • 啓用monkey模塊socket支持

其中使用了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()
做者:_小老虎_ 連接:https://www.jianshu.com/p/6f19f4fe6e19 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索