进程管理工具PM2在python项目中的使用

举报
芥末拌个饭吧 发表于 2022/11/11 09:53:54 2022/11/11
【摘要】 说到进程管理,后端和运维的同学都不陌生。生产项目以及一些脚本任务都需要进行进程管理。现在市场上用得最多的当属supervisor了,但是它只能运行在 Unix-Like 的系统上,也就是说supervisor不能再windows上运行。 我们这里说的是另外一个进程管理工具PM2,PM2不仅仅适用于Unix-Like系统,同样适用于windows系统。这点对于开发者来说也是个福音。

前言

说到进程管理,后端和运维的同学都不陌生。生产项目以及一些脚本任务都需要进行进程管理。现在市场上用得最多的当属supervisor了,但是它只能运行在 Unix-Like 的系统上,也就是说supervisor不能再windows上运行。

我们这里说的是另外一个进程管理工具PM2,PM2不仅仅适用于Unix-Like系统,同样适用于windows系统。这点对于开发者来说也是个福音,下面我们来说说PM2的简单使用。

一、PM2的安装

安装PM2,需要用到nodejs和npm,首先我们来安装nodejs和npm。

  1. 安装nodejs和npm
# 下载指定版本的nodejs,这里我们安装node14.17版本
wget https://nodejs.org/dist/v14.17.3/node-v14.17.3-linux-x64.tar.xz
# 加压安装包
tar xvf node-v14.17.3-linux-x64.tar.xz
# 重命名
mv node-v14.17.3-linux-x64 node
# 移动到/usr/local
mv node /usr/local
# 制作软连接
ln -s /usr/local/node/bin/node /usr/bin/node
ln -s /usr/local/node/bin/npm /usr/bin/npm

安装好nodejs和npm后,运行下node -v测试下是否安装成功。

  1. 安装pm2
npm install pm2 -g

# 制作软连接
ln -s /usr/local/node/bin/pm2 /usr/bin/pm2

安装好之后,输入pm2 -v查看版本。

二、PM2的使用

我们主要介绍下PM2如何管理python程序,这里我们新建一个简单的python文件test.py,代码如下:

def add_func(a, b):
    sums = a + b
    return sums

a = 1
b = 2
print(add_func(a, b))

我们用PM2启动一下看看,输入pm2 start 'python test.py'

如下图,启动后我们可以看到日志里代码运行了多次,这是为什么呢?下面我们先来介绍pm2常用的一些操作吧。 

PM2的常用操作

  1. 启动一个应用: pm2 start test.py 另外,我们可以在启动应用时添加相关参数:
# 给这个任务起名
--name {job_name} 或者 -n {job_name}

# 文件更新时自动重启任务
--watch

# 开启多进程
-i {num}

# 设置应用重新加载的内存阈值
--max-memory-restart <200MB>

# 定义日志路径
--log {log_path}

# 脚本额外参数
-- arg1 arg2 arg3

# 不要自动重启应用
--no-autorestart

# 设置cron定时任务
--cron {定时表达式}

从以上参数我们得知,应用默认会自动重启应用。如果我们不要自动重启,就要加上--no-autorestart参数。

我们加上参数测试一下,pm2 start test.py --no-autorestart。这时我们看到应用就只运行了一次。

  1. 查看应用状态 输入pm2 status或者pm2 ls查看任务列表。

  2. 重启应用 输入pm2 restart {id}或者pm2 reload {name}

备注:{id}指的是pm2任务ID,{name}指的是pm2任务的名称。下面例子都用{id}。

  1. 查看应用日志 输入pm2 logs {id}

  2. 停止应用 输入pm2 stop {id}

  3. 删除应用 输入pm2 delete {id}

  4. 查看应用详情 输入pm2 describe {id}

以上就是pm2的常用操作,下面主要介绍下python程序的启动配置。

配置pm2启动脚本

我们在运行一个python应用时,通常要指定python虚拟环境、传递额外参数、设置日志路径等。如果都将配置在命令行上写,不仅不方便输入,而且不便于管理。这时我们可以用到以配置文件启动的方式来处理。

以json配置文件启动

命令:pm2 start config.json 还是以上述test.py为例,我们此时启动该程序要求:

  • 指定程序路径
  • 指定python虚拟环境
  • 指定日志输出路径
  • 不要自动重启

为了满足上述需求,我们首先来看看json配置文件的主要参数

# 主要参数
name:   任务名称
script: 脚本路径
cwd:    程序目录
args:   额外参数
interpreter: 虚拟环境

# 其他参数
watch: 是否监控文件改动重启
error_file: 错误日志路径
out_file: 正常输入日志路径
autorestart:是否要自动重启

根据参数,我们来写运行配置文件pm2.json

{
    "name": "test_pm2_101",
    "cwd": "/Users/ethan/Desktop/test/pm2_test",
    "script": "/Users/ethan/Desktop/test/pm2_test/test.py",
    "interpreter": "/Users/ethan/miniconda3/envs/data_manage/bin/python",
    "out_file": "/Users/ethan/Desktop/test/pm2_test/log.log",
    "error_file": "/Users/ethan/Desktop/test/pm2_test/error.log",
    "autorestart" : false
}

最后,我们来运行一下任务:pm2 start pm2.json。 查看下日志:pm2 logs ,大功告成。

设置pm2自启动

最后讲一下pm2的自启动设置,没设置前,服务器重启后,pm2是不会自动重启的,因此我们的应用需重新启动了。

设置方法很简单,输入pm2 startup,然后根据提示设置即可。

小结

本文主要讲了使用pm2来作为python程序的进程管理,pm2轻量简单,适合后端快速部署应用,大家都用起来吧。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。