一、
程序已经跟docker容器绑定了,只要docker后台运行程序就能后台了,所以不必开守护进程 守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。 [1] 个人理解守护进程和普通进程区别是指:将后台程序变成一种服务,比如说,用命令行输入启动程序,如果不是守护进程的话,一旦命令行窗口关闭,程序就终止了;而如果启动守护进程,则退出命令行窗口之后,服务一直处于运行状态。
二、
今天登陆服务器发现python占用了相当高比例的cpu,然后发现是本站点使用flask做的的一些web小工具带来的,因此总算明白了启动flask的时候为什么提示不要在生产环境直接部署。0-0。因此决定部署好flask的生产环境,由于大部分人都对gunicorn评价很好,容易配置,因此本文也使用gunicorn来部署flask的生产环境了。
可以通过cat指令查看linux文件的内容
CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在docker run 时运行。
RUN 是在 docker build。
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
# -*- coding: utf-8 -*-
"""
"""
import multiprocessing
bind = '0.0.0.0:9537' # 绑定监听ip和端口号
workers = multiprocessing.cpu_count() * 2 # 同时执行的进程数,推荐为当前CPU个数*2+1
worker_class = "gevent" # sync, gevent,meinheld #工作模式选择,默认为sync,这里设定为gevent异步
backlog = 2048 # 等待服务客户的数量,最大为2048,即最大挂起的连接数
max_requests = 1000 # 默认的最大客户端并发数量
timeout = 600 # 进程沉默超时多少秒,杀死进程
daemon = False # 是否后台运行
reload = False # 当代码有修改时,自动重启workers。适用于开发环境。
capture_output = True # 将 stdout/stderr 重定向到错误日志中的指定文件。
loglevel = 'debug' # debug, info, warning, error, critical.
pidfile = 'logs/gunicore.pid' # 设置pid文件的文件名
accesslog = 'logs/gunicorn.log' # 设置访问日志
errorlog = 'logs/gunicorn.err.log' # 设置问题记录日志
FROM python:3.7.4
COPY . /deploy
WORKDIR /deploy
RUN pip config set global.index-url https://mirror.baidu.com/pypi/simple \
&& pip install --upgrade setuptools \
&& pip install --upgrade pip \
&& pip install -r requirements.txt \
&& python3 paddle_model.py
EXPOSE 9537
ENTRYPOINT ["gunicorn", "-c", "gunicorn_cfg.py", "main_api:app"]
注意执行指令里面的参数是双引号,不能是单引号
三 特别注意在程序里面不要配置argparse参数,否则会和gunicorn传参冲突并报错
四,内存报错,去掉多个进程,防止加载多套独立的程序导致内存溢出
1.查看CPU信息
cat /proc/cpuinfo
2.查看CPU指令集
gcc -march=native -Q --help=target | grep march
3.查看内存信息
cat /procmeminfo
# -*- coding: utf-8 -*-
"""
@Author :Mart
@Time :2021/10/26 16:19
@version :Python3.7.4
@Software:pycharm2020.3.2
"""
import multiprocessing
bind = "0.0.0.0:9537" # 绑定监听ip和端口号
# workers = multiprocessing.cpu_count() * 2 # 同时执行的进程数,推荐为当前CPU个数*2+1
workers = 1
worker_class = "gevent" # sync, gevent,meinheld #工作模式选择,默认为sync,这里设定为gevent异步
backlog = 2048 # 等待服务客户的数量,最大为2048,即最大挂起的连接数
max_requests = 1000 # 默认的最大客户端并发数量
timeout = 600 # 进程沉默超时多少秒,杀死进程
daemon = False # 是否后台运行
reload = False # 当代码有修改时,自动重启workers。适用于开发环境。
capture_output = True # 将 stdout/stderr 重定向到错误日志中的指定文件。
loglevel = "error" # debug, info, warning, error, critical.
pidfile = "logs/gunicore.pid" # 设置pid文件的文件名
accesslog = "logs/gunicorn.log" # 设置访问日志
errorlog = "logs/gunicorn.err.log" # 设置问题记录日志
|