进程管理工具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日志并进行多维度分析。
相关文章
|
2天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
34 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
1月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
106 61
Python装饰器实战:打造高效性能计时工具
|
1月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
80 37
Python时间序列分析工具Aeon使用指南
|
1月前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
122 20
|
1月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
2月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
565 7

热门文章

最新文章

推荐镜像

更多