关于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

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