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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 说到进程管理,后端和运维的同学都不陌生。生产项目以及一些脚本任务都需要进行进程管理。现在市场上用得最多的当属supervisor了,但是它只能运行在 Unix-Like 的系统上,也就是说supervisor不能再windows上运行。我们这里说的是另外一个进程管理工具PM2,PM2不仅仅适用于Unix-Like系统,同样适用于windows系统。这点对于开发者来说也是个福音,下面我们来说说PM2的简单使用。

前言

说到进程管理,后端和运维的同学都不陌生。生产项目以及一些脚本任务都需要进行进程管理。现在市场上用得最多的当属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/localmvnode /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,代码如下:

defadd_func(a, b):
sums=a+breturnsumsa=1b=2print(add_func(a, b))

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

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

image.png

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。这时我们看到应用就只运行了一次。

image.png

  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}

image.png

以上就是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,然后根据提示设置即可。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
人工智能 PyTorch 算法框架/工具
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
【8月更文挑战第6天】Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
|
4天前
|
运维 Devops 测试技术
一个人活成一个团队:python的django项目devops实战
DevOps通过自动化的流程,使得构建、测试、发布软件能够更加地快捷、频繁和可靠。本文通过一个python的django个人博客应用进行了DevOps的实战,通过DevOps拉通开发和运维,通过应用云效的DevOps平台实现自动化“软件交付”的流程,使得构建、测试、发布软件能够更加地快捷、频繁和可靠,提交研发交付效率。作为个人项目也是可以应用devops提高效率。
16 3
|
7天前
|
Python
python Process 多进程编程
python Process 多进程编程
17 1
|
12天前
|
数据采集 JSON 数据可视化
基于Python的51job招聘数据采集与可视化项目实践
本文介绍了一个基于Python的51job招聘数据采集与可视化项目,该项目通过自动化手段获取大量招聘信息,并运用数据分析和可视化工具对就业市场进行深度分析,旨在为求职者和企业提供数据支持和决策依据。
|
11天前
|
机器学习/深度学习 XML 搜索推荐
图像自动化保存工具:Python脚本开发指南
图像自动化保存工具:Python脚本开发指南
|
11天前
|
存储 安全 Python
[python]使用标准库logging实现多进程安全的日志模块
[python]使用标准库logging实现多进程安全的日志模块
|
16天前
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【8月更文挑战第3天】数字化时代下,信息安全至关重要。本文介绍如何用Python结合AES与RSA构建加密工具。AES因其高效加密大量数据的能力而被选中;RSA作为非对称加密算法,在密钥管理和数字签名上表现出色。先安装`pycryptodome`库,接着实现AES加密解密功能,并利用RSA加密AES密钥以安全传递。这套方案不仅速度快,还能有效保障数据安全,为开发者提供坚实的信息防护屏障。
26 5
|
13天前
|
机器学习/深度学习 数据可视化 数据处理
Python vs R:机器学习项目中的实用性与生态系统比较
【8月更文第6天】Python 和 R 是数据科学和机器学习领域中最受欢迎的两种编程语言。两者都有各自的优点和适用场景,选择哪种语言取决于项目的具体需求、团队的技能水平以及个人偏好。本文将从实用性和生态系统两个方面进行比较,并提供代码示例来展示这两种语言在典型机器学习任务中的应用。
36 1
|
16天前
|
安全 开发者 Python
跨越编程孤岛,构建互联大陆:深入探索Python进程间通信的奥秘,解锁高效协作新纪元!
【8月更文挑战第3天】在编程领域,Python 因其简洁强大而广受欢迎。但随着项目规模扩大,单进程难以应对复杂需求,此时多进程间的协同就显得尤为重要。各进程像孤岛般独立运行,虽提升了稳定性和并发能力,但也带来了沟通障碍。为解决这一问题,Python 提供了多种进程间通信(IPC)方式,如管道、队列和套接字等,它们能有效促进数据交换和任务协作,使各进程像大陆般紧密相连。通过这些机制,我们能轻松搭建起高效的多进程应用系统,实现更加复杂的业务逻辑。
18 2
|
16天前
|
消息中间件 Kafka 数据安全/隐私保护
Python IPC实战指南:构建高效稳定的进程间通信桥梁
【8月更文挑战第3天】在软件开发中,高效的进程间通信(IPC)对于构建复杂系统至关重要。本文通过分布式日志处理系统的案例,演示如何利用Python实现可靠的IPC。系统由多个收集日志的进程及中心服务器构成,选用套接字作为IPC机制以支持跨网通信与并发。实战包括定义通信协议、实现日志发送与接收功能,并进行测试部署。此方案不仅展现了Python在IPC领域的强大能力,还为实际应用中的错误处理、数据安全等问题提供了思考方向。
14 1