第一種啓動方式:使用supervisor控制的原生flask啓動【適合調試環境,一旦高度併發可能會崩潰!】
[program:flask_main]
directory=/root/youproject ; 非常重要,選擇在那個目錄下執行命令
command=/usr/local/Anaconda3/envs/youproject/bin/python -u flask_main.py ; command這裏的gunicorn一定是你程序運行的python環境【如果虛擬環境就必須選擇虛擬環境下面的路徑】
autostart = true ; 在 supervisord 啓動的時候也自動啓動
autorestart = true ; 程序異常退出後自動重啓
startsecs = 3 ; 啓動 3 秒後沒有異常退出,就當作已經正常啓動了
startretries = 3 ; 啓動失敗自動重試次數,默認是 3
redirect_stderr = true ; 把 stderr 重定向到 stdout,默認 false
user=root
loglevel=info
; 這一配置項的作用是:如果supervisord管理的進程px又產生了若干子進程,使用supervisorctl停止px進程,停止信號會傳播給px產生的所有子進程,確保子進程也一起停止。這一配置項對希望停止所有進> 程的需求是非常有用的。
stopasgroup=true
[supervisord] ; 必須配置
[supervisorctl] ; 必須配置
第二種啓動方式,使用supervisor控制的gunicorn+gevent啓動Flask項目【適合生產環境推薦使用】
[program:flask_main]
directory=/root/youproject; 非常重要,選擇在那個目錄下執行命令
command=/usr/local/Anaconda3/envs/youproject/bin/gunicorn -c other_config/gunicorn.py flask_main:app ; command這裏的gunicorn一定是你程序運行的python環境【如果虛擬環境就必須選擇虛擬環境下面的路徑】
autostart = true ; 在 supervisord 啓動的時候也自動啓動
autorestart = true ; 程序異常退出後自動重啓
startsecs = 3 ; 啓動 3 秒後沒有異常退出,就當作已經正常啓動了
startretries = 3 ; 啓動失敗自動重試次數,默認是 3
redirect_stderr = true ; 把 stderr 重定向到 stdout,默認 false
user=root
loglevel=info
stopasgroup=true
[supervisord] ; 必須配置
[supervisorctl] ; 必須配置
gunicorn.py配置文件
# gunicorn+gevent啓動Flask服務器的配置文件【gevent兼容配置websocket】
import multiprocessing
import gevent.monkey
# 【使用gevent啓動默認都會執行此方法】運行啓動添加猴子補丁
gevent.monkey.patch_all()
debug = True
loglevel = "debug"
bind = "0.0.0.0:8099"
workers = multiprocessing.cpu_count() * 2 + 1
chdir = "/root/flaskBlockChainGamble"
backlog = 2048
worker_class = "geventwebsocket.gunicorn.workers.GeventWebSocketWorker"
worker_connections = 1000
# 是否開啓後臺啓動【True開啓】----如果使用supervisor監控不能開啓【只能前端運行】
daemon = False
# gunicorn -c other_config/gunicorn.py flask_main:app
flask_main.py文件
"""
功能:基於【gunicorn+gevent的linux運行服務器】gevent兼容websocket,且性能最佳!
特殊說明:
1、gevent默認是單線程運行【可使用Python運行,相互請求之間是同步阻塞】
2、gevent必須結合gunicorn運行,開啓併發模式【不同請求之間相互獨立】,且性能非常給力!
3、gevent是否開啓debug模式,請在gunicorn的配置文件下配置debug屬性!
"""
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(
('0.0.0.0', 8099), app, handler_class=WebSocketHandler)
server.serve_forever()