当前位置: 首页 > 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.dtcms.com/a/296437.html

相关文章:

  • PM2使用
  • HMAC算法之SHA256哈希C++实现详解
  • windwos11网页切换残留/卡屏/冻结/残影问题
  • 在 OceanBase 中,使用 TO_CHAR 函数 直接转换日期格式,简洁高效的解决方案
  • 【安卓笔记】lifecycle与viewModel
  • 科大讯飞运维 OceanBase 的实践
  • RabbitMQ—仲裁队列
  • OceanBase 4.3.5 解析:DDL性能诊断
  • Windows 11下纯软件模拟虚拟机的设备模拟与虚拟化(仅终端和网络)
  • SpringCloud -- 服务保护和分布式事务
  • 六、Element-快速入门
  • Oracle序列
  • HTTP和HTTPS复习
  • 每日功能分享|让观看者体验“无缝链接”观看的功能——视频自动续播功能
  • 亚马逊云科技:引领云计算新时代,开启无限可能
  • 【PHP】ThinkPHP5使用EasyTask插件做定时任务
  • RAG面试内容整理-2. 稀疏检索基础(倒排索引、TF-IDF、BM25 等)
  • Vue2文件上传相关
  • vue中轮询:推荐 vue-request、@vueuse/core、rxjs
  • Vector Magic 1.15:强大的图片转矢量工具 + 使用教程
  • opt_param 隐含参数修改
  • Webpack/Vite 终极指南:前端开发的“涡轮增压引擎“
  • 深入理解 IO 多路复用:从 select 到 epoll
  • CTFshow-PWN-栈溢出(pwn67-pwn68)nop sled 空操作雪橇-对抗栈帧地址随机化
  • 数字化转型-埃森哲集团数字化顶层规划
  • SQL中的占位符、@Param注解和方法参数
  • vue递归树形结构删除不符合数据 生成一个新数组
  • HTTPS如何保障安全?详解证书体系与加密通信流程
  • AI 在金融:重塑金融服务的智能革命
  • 《小白学习产品经理》第十章:方法论之MVP