關於Python-flask的啓動方式總結【如何更好的優化運行性能,生產環境和調試環境未必選擇可能不一樣】

第一種啓動方式:使用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()

參考配置文檔:https://www.cnblogs.com/fengff/p/9225859.html

參考配置文檔:https://www.jianshu.com/p/192e62a5cdd2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章