前言:
使用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'