結合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核心數(
通過多進程部署服務,可顯著提升系統性能和可靠性,尤其適合計算密集型和多服務協同場景。但需權衡進程創建開銷與收益 。