前言:
使用flask做服務時,可以使用python run.py的方式運行,但是這樣不能用於生產環境,可能會出現連接無響應的情況。后來通過查找資料,發現flask服務處理多線程、高並發的一下方法,主要有一下幾個方面:
1.通過設置app.run()的參數,來達到多線程的效果,具體參數:
# 1.threaded : 多線程支持,默認為False,即不開啟多線程; app.run(threaded=True) # 2.processes:進程數量,默認為1. app.run(processes=True) ps:多進程或多線程只能選擇一個,不能同時開啟
2.使用genvent做協程,解決高並發:
from genvent.wsgi import WSGIServer from genvent import monkey monkey.patch_all() app = Flask(__name__) app.config.from_object(config) api = Api(app) db = DBInfo() # db_old = DBInfo_old()
然后通過這種方式包裝WSGIServer((address,port), app).serve_forever()
通過python code.py 的方法,來啟動服務
3.通過Guicorn(with genvent)的形式來對app進行包裝,來啟動服務;
通過一下代碼,來啟動項目
# 啟動命令
gunicorn -c gun.py thread_explore:app
其中gun.py是gunicorn的配置文件
thread_explore是服務的主程序
app是flask的app
gun.py的具體內容:
import os import gevent.monkey gevent.monkey.patch_all() import multiprocessing # 服務地址(adderes:port) bind = 127.0.0.1;5000 # 啟動進程數量 workers = multiprocessing.cpu_count() * 2 +1 worker_class = 'gevent' threads = 20 preload_app = True reload = True x_forwarded_for_header = 'X_FORWARDED-FOR'
ps:這里啟動進程數量應該是根據CPU個數來確定的,最好是2 * CPU數 + 1
參考資料:
https://www.jianshu.com/p/a90775e33b52
https://www.cnblogs.com/lesliexong/p/9396850.html
作者:sunshaoping1994
鏈接:https://www.jianshu.com/p/79489cfc6fb9
