当前位置: 首页 > news >正文

multiprocessing模块使用方法(一)

结合Python代码示例说明multiprocessing模块的使用方法、Linux启动命令、服务部署及真实应用场景:


一、multiprocessing基础用法

Python的multiprocessing模块通过创建子进程实现并行计算,核心步骤如下(引用):

  1. 创建进程对象

    from multiprocessing import Process
    def worker(num):print(f"Worker {num} started (PID: {os.getpid()})")
    if __name__ == '__main__':p = Process(target=worker, args=(1,))  # 目标函数及参数
    
  2. 启动与等待

    p.start()  # 启动子进程 [[1,2,4]]
    p.join()   # 阻塞主进程直至子进程结束 [[4,6]]
    
  3. 关键方法

    • p.pid:获取进程ID
    • p.terminate():强制终止进程(需谨慎使用)
    • p.is_alive():检查进程是否存活

二、Linux系统中的启动命令

在Linux下运行Python多进程脚本:

python demo.py &  # 后台运行 [[11,14]]

或通过nohup持久化:

nohup python demo.py > log.txt 2>&1 &  

三、完整Demo:多进程部署FastAPI服务

以下示例同时启动FastAPI服务和计算任务:

import multiprocessing
import os
from fastapi import FastAPI
import uvicorn# FastAPI服务进程
def run_api():app = FastAPI()@app.get("/")def home():return {"message": "API running", "pid": os.getpid()}uvicorn.run(app, host="0.0.0.0", port=8000)# 计算任务进程
def heavy_task():result = sum(i*i for i in range(10**7))print(f"Task result: {result} (PID: {os.getpid()})")if __name__ == '__main__':# 创建进程api_proc = multiprocessing.Process(target=run_api)task_proc = multiprocessing.Process(target=heavy_task)# 启动进程api_proc.start()  # 启动API服务 [[3,9]]task_proc.start() # 启动计算任务 [[6,8]]# 等待结束(可选)task_proc.join()  # 主进程等待计算任务完成 print("Main process exits.")

服务部署说明

  1. 进程隔离
    • API服务(run_api)与计算任务(heavy_task)运行在独立进程,避免阻塞I/O 。
  2. 访问服务
    • 启动后通过[http://localhost:8000 ](http://localhost:8000 )访问FastAPI接口 。
  3. 进程资源
    • 每个进程有独立内存空间,需通过QueuePipe跨进程通信(未展示)。

四、真实应用场景

  1. CPU密集型任务

    • 如科学计算、图像处理,多进程利用多核CPU加速 。
      示例:并行处理大量数据:
    with multiprocessing.Pool(4) as pool:  # 创建4进程池results = pool.map(process_data, large_dataset)  # 并行映射 [[15,17]]
    
  2. 微服务架构

    • 同时运行多个服务(如API + 定时任务),避免单点故障 。
  3. 高并发处理

    • 每个请求分配独立进程,提升Web服务吞吐量(但需注意进程开销)。
  4. 爬虫系统

    • 多进程并行抓取不同网站,提高效率 。

五、注意事项

  1. 跨平台兼容性
    • multiprocessing在Linux/Windows均可用,但Linux基于fork(),Windows基于spawn
  2. 避免僵尸进程
    • 调用join()terminate()后需确保资源回收 。
  3. 进程数限制
    • 进程数不宜超过CPU核心数(multiprocessing.cpu_count())。

通过多进程部署服务,可显著提升系统性能和可靠性,尤其适合计算密集型和多服务协同场景。但需权衡进程创建开销与收益 。

http://www.lryc.cn/news/598709.html

相关文章:

  • S7-1500 与 ET200MP 的组态控制通信(Configuration Control)功能实现详解(上)
  • 设备虚拟化技术IRF
  • 力扣刷题(第九十七天)
  • 智慧驾驶疲劳检测算法的实时性优化
  • 「Linux命令基础」用户和用户组实训
  • 雷达使用的MSOP端口和DIFOP端口是什么意思
  • Spring-狂神说
  • Claude4、GPT4、Kimi K2、Gemini2.5、DeepSeek R1、Code Llama等2025主流AI编程大模型多维度对比分析报告
  • 【PZ-ZU7EV-KFB】——ZYNQ UltraScale + ZU7EV开发板ARM/FPGA异构计算开发平台,赋能多域智能硬件创新
  • python学习xlsx表格导入mysql脚本 + leetcode19删除链表倒N + python与本地mysql连接不上排错
  • 游戏开发Unity/ ShaderLab学习路径
  • rust-数据结构
  • 20250724-day21
  • Qt 调用ocx的详细步骤
  • 解决 SQL 错误 [1055]:深入理解 only_full_group_by 模式下的查询规范
  • R study notes[1]
  • 完成多项问题修复,MaxKB开源企业级智能体平台v1.10.9 LTS版本发布
  • C++图论全面解析:从基础概念到算法实践
  • 学习游戏制作记录(技能系统)7.24
  • Oracle国产化替代:一线DBA的技术决策突围战
  • 【ROS1】09-ROS通信机制——参数服务器
  • ubuntu25.04+4070+cuda+docker安装
  • prometheus监控k8s的metric详解-01-apiserver部分-05-其他
  • k8s把某个secret挂在某命名空间下
  • 【数据结构】二叉树进阶算法题
  • MongoDB常用场景
  • AI总结视频以及谷歌浏览器插件安装步骤
  • 对examples/train_lora/llama3_lora_eval.yaml模型评估配置文件的理解。
  • Vue2文件上传相关
  • 零知识证明