multiprocessing模块使用方法(一)
结合Python代码示例说明multiprocessing模块的使用方法、Linux启动命令、服务部署及真实应用场景:
一、multiprocessing基础用法
Python的multiprocessing
模块通过创建子进程实现并行计算,核心步骤如下(引用):
-
创建进程对象:
from multiprocessing import Process def worker(num):print(f"Worker {num} started (PID: {os.getpid()})") if __name__ == '__main__':p = Process(target=worker, args=(1,)) # 目标函数及参数
-
启动与等待:
p.start() # 启动子进程 [[1,2,4]] p.join() # 阻塞主进程直至子进程结束 [[4,6]]
-
关键方法:
p.pid
:获取进程IDp.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.")
服务部署说明:
- 进程隔离:
- API服务(
run_api
)与计算任务(heavy_task
)运行在独立进程,避免阻塞I/O 。
- API服务(
- 访问服务:
- 启动后通过
[http://localhost:8000 ](http://localhost:8000 )
访问FastAPI接口 。
- 启动后通过
- 进程资源:
- 每个进程有独立内存空间,需通过
Queue
或Pipe
跨进程通信(未展示)。
- 每个进程有独立内存空间,需通过
四、真实应用场景
-
CPU密集型任务:
- 如科学计算、图像处理,多进程利用多核CPU加速 。
示例:并行处理大量数据:
with multiprocessing.Pool(4) as pool: # 创建4进程池results = pool.map(process_data, large_dataset) # 并行映射 [[15,17]]
- 如科学计算、图像处理,多进程利用多核CPU加速 。
-
微服务架构:
- 同时运行多个服务(如API + 定时任务),避免单点故障 。
-
高并发处理:
- 每个请求分配独立进程,提升Web服务吞吐量(但需注意进程开销)。
-
爬虫系统:
- 多进程并行抓取不同网站,提高效率 。
五、注意事项
- 跨平台兼容性:
multiprocessing
在Linux/Windows均可用,但Linux基于fork()
,Windows基于spawn
。
- 避免僵尸进程:
- 调用
join()
或terminate()
后需确保资源回收 。
- 调用
- 进程数限制:
- 进程数不宜超过CPU核心数(
multiprocessing.cpu_count()
)。
- 进程数不宜超过CPU核心数(
通过多进程部署服务,可显著提升系统性能和可靠性,尤其适合计算密集型和多服务协同场景。但需权衡进程创建开销与收益 。