flask+gunicorn部署python并发服务

问题:

1.在linux下部署Flask性能比较低这个时候可以用一些热门的框架帮助Flask提高并发性能

2.经过调研和尝试使用
gunicorn可以结合gevent来进行部署,因此在高并发场景下也可适用,于是决定采用gunicorn进行部署。

环境安装

首先pip安装gunicorn。

pip install gunicorn --user

在运行的python脚本目录 创建加载并且配置文件
详情:

# config.py
import os
import gevent.monkey
gevent.monkey.patch_all()

import multiprocessing

# debug = True
loglevel = ‘debug‘
bind = "0.0.0.0:5000"
# 在当前目录下创建一个log文件夹用来存放日志和运行的pid
pidfile = "log/gunicorn.pid"
accesslog = "log/access.log"
errorlog = "log/debug.log"
# 进程守护True为开启后台模式,这里需要注意刚开始挂起最好使用False 看看脚本有没有反馈
daemon = True

# 启动的进程数
workers = 4
worker_class = ‘gevent‘
x_forwarded_for_header = ‘X-FORWARDED-FOR‘

调用命令:

[root@VM-0-15-centos ~]# gunicorn -c gunicorn.py main:app
# 这里需要注意第一次启动前先把配置文件中的
  进程守护默认为False前台运行调试没问题 再挂载到后台

# 启动完成 进程是否启动成功可以用ps -aux看下
[root@VM-0-15-centos ~]# ps -aux|grep 要查询的脚本名
1.debug = True

生产环境不需要这个配置项,调试的时候可以使用。
开启debug项后,在启动gunicorn的时候可以看到所有可配置项的配置,如下所示。
config.py中只需要配置需要修改的项的,大部分采用默认配置即可。默认配置的具
体配置内容可以通过gunicorn -h来查询。

2.日志
  1. 需要log目录存在。如果不存在,启动会报错
  2. accesslog是访问日志,可以通过access_log_format设置访问日志格式
  3. loglevel用于控制errorlog的信息级别,可以设置为debug、info、warning、error、critical
3.workes
  1. worker_class是指开启的每个工作进程的模式类型,默认为sync模式,也可使用gevent模式。
  2. orkers是工作进程数量,在上述config.py中,取的是CPU的数量。需要注意部署机器的性能,不能无限制多开。多篇文章中推荐了multiprocessing.cpu_count() * 2 + 1这个数量
4.daemon

daemon = True意味着开启后台运行,默认为False

5.注意事项

需要注意的事项,在falsk代码里不能再加

# from gevent.pywsgi import WSGIServer
# monkey.patch_all()

都需要把的gevent,monkey模块并发注释掉,使用gunicorn里的monkey.patch_all()和gevent模块

gunicorn的进程守护 需要替代品

flask+gunicorn部署python并发服务

上一篇:Java实现打印输出杨辉三角


下一篇:SpringBoot-Data