Gunicorn+Supervisor部署高性能高稳定的算法服务

gunicorn

gunicorn简介

Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有部署使用非常简单,轻量级的资源消耗,以及高性能等特点。

gunicorn安装

1.Debian/Ubuntu可通过apt安装

apt-get install gunicorn

2.Centos可通过yum安装

yum install gunicorn

3.pip安装

pip install gunicorn

gunicorn使用

以下面的示例文件为例,简述使用方法。

# filename:test.py
def app(environ, start_response):
  """Simplest possible application object"""
  data = 'Hello, World!\n'
  status = '200 OK'
  response_headers = [
    ('Content-type','text/plain'),
    ('Content-Length', str(len(data)))
  ]
  start_response(status, response_headers)
  return iter([data])

可以直接用命令运行,

gunicorn --workers=2 test:app

常见[OPTIONS]参数,

  • -c CONFIG, --config=CONFIG: 指定配置文件(配置文件必须是py文件)

  • -b BIND, --bind=BIND: 与指定socket进行绑定

  • -D, --daemon: 以守护进程形式来运行Gunicorn进程,其实就是将这个服务放到后台去运行。

    如果希望supervisor来监控,daemon必须为false

  • -w WORKERS, --workers=WORKERS: 工作进程的数量。上边提到gunicorn是一个pre-fork worker模式,就是指gunicorn启动的时候,在主进程中会预先fork出指定数量的worker进程在处理请求时,gunicorn依靠操作系统来提供负载均衡,通常推荐的worker数量是:(2 x $num_cores) + 1。

    起多少个进程需要根据服务器的内存来定,如果太多了内存扛不住可能起不来。

  • -k WORKERCLASS, --worker-class=WORKERCLASS: 工作进程类型. 包括 sync(默认), eventlet, gevent, or tornado, gthread, gaiohttp

  • –backlog INT: 最大挂起的连接数

  • –chdir: 切换到指定的工作目录

  • –log-level LEVEL: 输出error log的颗粒度,有效的LEVEL有:debug、info、warning、error、critical

  • –access-logfile FILE: 确认要写入Access log的文件FILE. ‘-’ 表示输出到标准输出

  • –error-logfile FILE, --log-file FILE: 确认要写入Error log的文件FILE. ‘-’ 表示输出到标准错误输出

下面是一个参考的配置文件

# filename:gunicorn.conf.py
# 绑定ip和端口号
bind = '0.0.0.0:8080'

# 设置守护进程,将进程交给supervisor管理
daemon = 'false'

# 监听队列
backlog = 512

# 超时
timeout = 30

# 使用gevent模式,还可以使用sync 模式,默认的是sync模式
worker_class = 'gevent'

# 进程数
# workers = multiprocessing.cpu_count() * 2 + 1
workers = 4

# 指定每个进程开启的线程数
threads = 2

# 设置最大并发量
worker_connections = 2000

# 设置访问日志路径
accesslog = "/home/rd/logs/access.log"

# 设置错误日志路径
errorlog = "/home/rd/logs/debug.log"

# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
loglevel = 'info'

相应的运行命令,

gunicorn -c gunicorn.conf.py test:app

如果你的gunicorn不是系统默认的,运行时你需要指定gunicorn的路径,否则会出现找不到相应命令的错误。如果是用pip安装的,你需要先激活安装了gunicorn的环境。

supervisor

supervisor简介

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

supervisor安装

1.Debian/Ubuntu可通过apt安装

apt-get install supervisor

2.Centos可通过yum安装

yum install supervisor

3.pip安装

pip install supervisor

4.easy_install安装

easy_install supervisor

supervisor使用

生成 supervisor 默认配置文件,首先生产一个supervisor目录,默认放在/etc/目录下,当然你可以根据需要放在其他目录下面。

echo_supervisord_conf > /etc/supervisor/supervisor.conf

这里我们放在/etc/supervisor/目录下,文件名为supervisor.conf,可以取其他名字。

如果你的项目的配置文件想根据项目需求单独写,你需要修改一些配置,将你的配置文件的路径加到include下,

sudo vim /etc/supervisor/supervisor.conf

在文件最后一行添加你的配置文件的路径

[include]
files =/xxx/test.conf

配置文件中注释是用冒号注释

下面我们开始写配置文件,

[program:test]

;项目工作目录(脚本启动目录的全路径)
directory = /home/rd/xxx

;启动命令
command = gunicorn -c gunicorn.conf.py app:app

;启动时间
startsecs = 0

;终止等待时间
stopwaitsecs = 0

;supervisord守护程序启动时自动启动tornado
autostart = true

;supervisord守护程序重启时自动重启tornado
autorestart = true

;log 日志
stderr_logfile=/home/rd/logs/error.log

启动命令,

supervisord -c /etc/supervisor/supervisor.conf

supervisorctl一些常见的命令,

supervisorctl status    # 查看程序状态
supervisorctl stop update_ip   # 关闭 update_ip 程序
supervisorctl start update_ip  # 启动 update_ip 程序
supervisorctl restart update_ip    # 重启 update_ip 程序
supervisorctl reread    # 读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl update    # 重启配置文件修改过的程序
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastAPI是一个现代、快速(高性能)的Web框架,它使用最新的ASGI标准。Gunicorn是一个使用WSGI标准的应用服务器,它可以直接运行Flask和Django,但不能直接运行FastAPI。为了在部署FastAPI时使用Gunicorn,可以借助uvicorn工作器。可以使用以下命令来启动FastAPI应用程序: ``` gunicorn main:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 ``` 这个命令中,`main`是你的应用程序的入口文件名,`app`是FastAPI应用程序的实例名。`--workers 2`表示使用2个工作进程,`--worker-class uvicorn.workers.UvicornWorker`表示使用uvicorn工作器,`--bind 0.0.0.0:8000`表示绑定到0.0.0.0的8000端口。这样就可以使用Gunicorn和uvicorn工作器来部署FastAPI应用程序了。123 #### 引用[.reference_title] - *1* *2* [ubuntu+nginx+gunicorn+uvicorn+fastapi](https://blog.csdn.net/qq_41960127/article/details/128832617)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [Docker生产环境部署FastAPI+supervisor+gunicorn+nginx](https://blog.csdn.net/weixin_45457042/article/details/129213133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值