天天看點

python如何解決高并發_Flask 處理高并發、多線程

前言:

使用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'