首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >十五天Python系统学习教程第七天

十五天Python系统学习教程第七天

作者头像
紫风
发布2025-10-14 15:29:51
发布2025-10-14 15:29:51
400
代码可运行
举报
运行总次数:0
代码可运行
📅 Day 7 详细学习计划:Python进程管理与服务控制

学习目标 ✅ 掌握Python进程管理(对比Java的ProcessBuilder) ✅ 熟练使用subprocess模块执行系统命令 ✅ 理解系统服务管理(Systemd vs Python服务化) ✅ 完成进程监控与自动重启实战


一、进程管理基础(1小时)
1.1 创建进程(对比Java Runtime.exec)

功能

Java实现

Python实现

执行命令

Runtime.getRuntime().exec()

subprocess.run()

获取输出

读取InputStream

stdout=subprocess.PIPE

异步执行

Process.waitFor()

subprocess.Popen()

代码对比

代码语言:javascript
代码运行次数:0
运行
复制
// Java执行命令  
Process proc = Runtime.getRuntime().exec("ls -l");  
BufferedReader reader = new BufferedReader(  
    new InputStreamReader(proc.getInputStream()));  
String line;  
while ((line = reader.readLine()) != null) {  
    System.out.println(line);  
}  
代码语言:javascript
代码运行次数:0
运行
复制
# Python执行命令  
import subprocess  

# 同步执行(推荐)  
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)  
print(result.stdout)  

# 异步执行  
proc = subprocess.Popen(["ping", "google.com"], stdout=subprocess.PIPE)  
while proc.poll() is None:  
    print(proc.stdout.readline())  

1.2 进程间通信(IPC)

管道通信示例

代码语言:javascript
代码运行次数:0
运行
复制
# 父进程发送数据到子进程  
from multiprocessing import Pipe  

parent_conn, child_conn = Pipe()  
child_conn.send("Hello from child")  
print(parent_conn.recv())  # 输出接收的数据  

共享内存示例

代码语言:javascript
代码运行次数:0
运行
复制
from multiprocessing import Value, Array  

# 共享整型值  
counter = Value('i', 0)  
counter.value += 1  

# 共享数组  
arr = Array('d', [1.0, 2.0])  
arr[0] = 3.14  

二、系统服务管理(1小时)
2.1 服务控制(Systemd对比)

操作

Systemd命令

Python实现

启动服务

systemctl start nginx

subprocess.run(["systemctl", "start", "nginx"])

守护进程化

配置文件[Service]段

使用daemon模块或第三方库

Python服务化示例

代码语言:javascript
代码运行次数:0
运行
复制
import daemon  

def run_as_service():  
    while True:  
        do_work()  

# 转换为守护进程  
with daemon.DaemonContext():  
    run_as_service()  

2.2 日志管理
代码语言:javascript
代码运行次数:0
运行
复制
import logging  
from logging.handlers import RotatingFileHandler  

# 配置日志(类似Log4j)  
logging.basicConfig(  
    handlers=[RotatingFileHandler("app.log", maxBytes=1e6, backupCount=3)],  
    level=logging.INFO,  
    format="%(asctime)s [%(levelname)s] %(message)s"  
)  

logging.info("Service started")  

三、实战项目:进程监控工具(1.5小时)
3.1 需求分析
  • 监控指定进程的CPU/内存占用
  • 异常时自动重启
  • 生成监控报告
3.2 核心实现

进程信息获取

代码语言:javascript
代码运行次数:0
运行
复制
import psutil  # 第三方库,需安装  

def get_process_info(name):  
    for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']):  
        if proc.info['name'] == name:  
            return {  
                'pid': proc.info['pid'],  
                'cpu': proc.info['cpu_percent'],  
                'memory': proc.info['memory_info'].rss / 1024 / 1024  # MB  
            }  
    return None  

自动重启逻辑

代码语言:javascript
代码运行次数:0
运行
复制
def restart_process(cmd):  
    subprocess.run(["pkill", "-f", cmd[0]])  
    return subprocess.Popen(cmd)  

def monitor(process_name, cmd, max_cpu=90, max_mem=1024):  
    while True:  
        info = get_process_info(process_name)  
        if not info or info['cpu'] > max_cpu or info['memory'] > max_mem:  
            restart_process(cmd)  
        time.sleep(5)  

使用方式

代码语言:javascript
代码运行次数:0
运行
复制
monitor("nginx", ["nginx", "-g", "daemon off;"])  

四、Java开发者特别注意事项

进程生命周期管理

  • Python的subprocess比Java更简洁,但需手动处理僵尸进程
代码语言:javascript
代码运行次数:0
运行
复制
proc = subprocess.Popen(...)  
try:  
    proc.wait(timeout=10)  
except subprocess.TimeoutExpired:  
    proc.terminate()  

跨平台差异

  • Windows与Unix的信号处理不同
代码语言:javascript
代码运行次数:0
运行
复制
import signal  
signal.signal(signal.SIGTERM, handler)  # Unix only  

性能监控精度

  • Java的ManagementFactory提供JVM详细数据
  • Python需依赖psutil获取系统级指标

五、扩展练习

实现服务健康检查API

代码语言:javascript
代码运行次数:0
运行
复制
from flask import Flask  
app = Flask(__name__)  

@app.route('/health')  
def health():  
    return {"status": "OK", "pid": os.getpid()}  

构建进程管理CLI工具

代码语言:javascript
代码运行次数:0
运行
复制
# 支持命令:python manager.py start|stop|status  
import argparse  
parser = argparse.ArgumentParser()  
parser.add_argument("action", choices=["start", "stop", "status"])  
args = parser.parse_args()  

容器化部署

代码语言:javascript
代码运行次数:0
运行
复制
# Dockerfile示例  
FROM python:3.10  
COPY monitor.py .  
RUN pip install psutil  
CMD ["python", "monitor.py"]  

通过第七天的学习,您将掌握: 1️⃣ Python原生进程管理能力 2️⃣ 系统服务化关键技术点 3️⃣ 生产级进程监控方案 4️⃣ 与Java方案的优劣势对比

本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📅 Day 7 详细学习计划:Python进程管理与服务控制
  • 一、进程管理基础(1小时)
    • 1.1 创建进程(对比Java Runtime.exec)
    • 1.2 进程间通信(IPC)
  • 二、系统服务管理(1小时)
    • 2.1 服务控制(Systemd对比)
    • 2.2 日志管理
  • 三、实战项目:进程监控工具(1.5小时)
    • 3.1 需求分析
    • 3.2 核心实现
  • 四、Java开发者特别注意事项
  • 五、扩展练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档