utils系列:gunicorn flask 启动多进程;杀gunicorn 进程

一、gunicorn flask

一个简单的flask demo:

#main.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'hello world'


if __name__ == '__main__':
    app.run()

安装gunciorn

pip install gunicorn

gunicorn 执行命令

gunicorn -b 0.0.0.0:8000 -w 4 main:app

-w 为进程数,main为上面的main.py  app为flask里对app的实例化名字

gunicorn 以配置文件执行,可以是py文件 也可以是conf文件

先写配置文件guncfg.py():

import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing

backlog = 512                #监听队列
#chdir = '/opt/python'  #gunicorn要切换到的目的工作目录

bind = '0.0.0.0:18000'
timeout = 30      #超时
debug = False
workers = 3    #进程数
threads = 1 #指定每个进程开启的线程数
loglevel = 'info' #日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'    #设置gunicorn访问日志格式,错误日志无法设置

accesslog = "/opt/python/log/gunicorn_access.log"      #访问日志文件
errorlog = "/opt/python/log/gunicorn_error.log"        #错误日志文件

gunicorn执行命令:

gunicorn -c guncfg.py main:app

运行结果:

二、杀gunicorn 进程

我试过直接在python代码的执行条件中加入 sys.exit()和exit(-1)

if not True:
    sys.exit()
    exit(-1)

都没用任何luan用 会一遍一遍的执行的你的程序 执行到sys.exit()结束。不会把gunicorn结束掉,网上有个方法:

def kill_gun():
    # 要杀死程序名称
    program_name = "xxx"
    # 终端执行的命令
    order_str = "ps x|grep %s" % program_name
    try:
    # 执行
    p = subprocess.popen(order_str)
    t_strs = p.stdout.read()
    # 通过正则获取pid
    pid_list = re.findall(r"(\d+).+chromedriver --port=\d+", t_strs, re.I)
    print(pid_list)
    for j in pid_list:
        print(j)
        # 杀死进程
        os.kill(int(j), signal.SIGKILL)
        

我把里面的 ps x| grep 改成了 ps -ef|grep 也没有用,这个代码需要二次开发才能使用,索性自己写把

def kill_process():
    # 要杀死程序名称
    program_name = "gunicorn:app"
    # 终端执行的命令
    process_id= subprocess.Popen(["pgrep", "-f", program_name], stdout=subprocess.PIPE,
shell=False)
    # 获取pid
    pid = str(process_id.communicate()[0], 'utf-8').split("\n")
    for i in pid:
        os.system("kill -9 " + str(i)

然后在python的条件语句中加入此方法就可以杀掉进程了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值