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.pswp.cn/diannao/92772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92772.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vector如何判斷應該擴容?

std::vector 的擴容機制是 C 容器性能優化的一個核心點。它的判斷標準、行為特征和實現細節如下所示:? 一、vector 的核心結構 std::vector 內部維護三個指針: begin -> 指向數據起始位置 end -> 指向當前已使用的元素末尾(size…

ICMP考點

在網絡工程師、運維工程師、安全工程師等崗位的面試中,??ICMP(Internet Control Message Protocol,互聯網控制報文協議)?? 是高頻必考知識點。ICMP作為IP協議的“輔助協議”,雖然不直接傳輸用戶數據,但…

服務器帶寬具體是指什么意思?

企業在選擇服務器租用或托管服務時,需要根據自身的業務情況來選擇合適的服務器帶寬,以便于能夠讓其業務持續穩定的運行工作,做到及時響應用戶的訪問請求,但是很多用戶對于帶寬一詞沒有過多的概念,本文就來探討一下服務…

CANape之ASAP2 Studio介紹

提到ECU的測量標定工具,很多小伙伴第一個想到的就是CANape。但其實,除了強大的測量標定功能之外,CANape還有很多其他功能。例如,CANape中集成的小工具——ASAP2 Studio,其支持對A2L文件(由ASAM組織所定義&a…

【debug日記】MONAI SwinUNETR 目標檢測項目調試總結(AI自動總結)

MONAI SwinUNETR 目標檢測項目調試總結 日期: 2025年7月25日 項目: 使用 MONAI,以預訓練的 SwinUNETR 為骨干網絡,微調 RetinaNet 進行3D肺結節檢測。 本文檔旨在記錄在項目配置、數據處理和模型訓練過程中遇到的一系列問題及其解決方案,作為…

AI同傳領域,字節跳動與科大訊飛激戰進行時

在AI同聲傳譯市場,行業巨頭科大訊飛長期占據主導地位,但新晉玩家字節跳動正以迅猛姿態發起挑戰。7月24日,字節旗下火山引擎正式發布豆包同聲傳譯模型 Seed LiveInterpret 2.0,主打“人類級延遲”和“0樣本聲音復刻”,試…

[C++]string::substr

string substr (size_t pos 0, size_t len npos) const;substr() 主要功能是復制(截取更準確)子字符串,要求從指定位置 pos 開始,并具有指定的長度 len 。如果沒有指定長度或者超出了源字符串的長度,則子字符串將延續…

KNN算法:從原理到實戰全解析

一 算法介紹 K近鄰(K-Nearest Neighbors, KNN)是一種基于實例的監督學習算法,適用于分類和回歸任務。其核心思想是通過計算待預測樣本與訓練集中樣本的距離,選取距離最近的K個鄰居,根據這些鄰居的標簽進行投票&#xf…

醫療器械:DFEMA和PFEMA

在醫療器械行業,DFMEA(Design FMEA,設計失效模式及影響分析)和 PFMEA(Process FMEA,過程失效模式及影響分析)是核心的風險管理工具,旨在通過系統性識別潛在風險、分析影響并采取預防…

Qt 與 SQLite 嵌入式數據庫開發

Qt 與 SQLite 的結合是開發輕量級、跨平臺嵌入式數據庫應用的理想選擇。SQLite 作為一種零配置、文件型數據庫,無需獨立的服務器進程,非常適合集成到 Qt 應用中。本文將深入探討 Qt 與 SQLite 的嵌入式數據庫開發,包括基礎操作、高級特性、性…

Oracle OMF 非OMF 文件 轉化 不需要重建 file#.incarnation#

不需要重建就要重啟, alter database datafile move 就可以在線 file#.incarnation# 是 incarnation 不是dbid Goal How to convert non OMF files to OMF files with ASM storage Datafiles are not deleted at dropping tablespace if files are non-OMF and …

大型微服務項目:聽書——11 Redisson分布式布隆過濾器+Redisson分布式鎖改造專輯詳情接口

11 Redisson分布式布隆過濾器Redisson分布式鎖改造專輯詳情接口 11.1 緩存穿透解決方案&布隆過濾器 緩存穿透解決方案: 布隆過濾器: 布隆過濾器的使用: 11.2 遠程調用查詢所有的專輯id集合 修改: /*** 查詢所有的專輯…

STM32與ADS1220實現多通道數據采集的完整分析和源程序

以下是基于STM32與ADS1220實現多通道數據采集的完整分析和源程序,結合硬件設計、通信協議及軟件優化,提供高精度采集解決方案: 一、系統設計關鍵要點 ADS1220特性 24位高精度ΔΣ ADC,支持4路單端或2路差分輸入 集成PGA(增益1~128)、基準電壓和可編程電流源 多通道限制:…

百特搭AI低代碼平臺助力企業國際化業務敏捷拓展

在全球化浪潮下,企業揚帆出海或服務全球客戶已成為重要戰略。然而,開拓國際市場面臨多重挑戰:語言文化差異顯著、本地化需求復雜多變、智能化應用需求激增、各國IT基礎設施與合規要求各異。企業亟需一個能夠快速響應、靈活適應,并…

epoll_event數據結構及使用案例詳解

epoll_event 數據結構詳解 在 Linux 的 I/O 多路復用機制 epoll 中&#xff0c;epoll_event 是關鍵的數據結構&#xff0c;用于描述文件描述符&#xff08;fd&#xff09;上的事件和關聯數據。其定義在頭文件 <sys/epoll.h> 中&#xff1a; struct epoll_event {uint32_t…

C++11STL容器map和set簡單介紹

一、引言map和set底層結構比較復雜&#xff0c;我認為我們先談基本介紹再談C11&#xff0c;最后再談map和set底層以及map和set封裝。二、簡單介紹一下map和setmap和set底層都是紅黑樹&#xff0c;是二叉搜索樹的一種&#xff0c;查找非常快。不像數組、鏈表一樣一個一個對比&am…

Java線程基礎面試復習筆記

1. 線程與進程的區別進程是正在運行程序的實例&#xff0c;線程是進程中的執行單元。主要區別&#xff1a; 內存空間&#xff1a;不同進程使用不同的內存空間&#xff0c;同一進程下的線程共享內存空間資源開銷&#xff1a;線程更輕量&#xff0c;線程上下文切換成本比進程上下…

面試題(技術面+hr面)

面試技術面HR面后端HR面常見問題*穩定性&#xff0c;上進心&#xff0c;目標感&#xff0c;抗壓能力&#xff0c;學習能力*回答問題時注意體現上面五點&#xff0c;即使瞎扯也盡量往上靠。面經項目相關介紹一下你收獲最大的一個項目你們團隊有多少人&#xff0c;怎么分工的開發…

本地部署Dify教程

克隆 Dify 代碼倉庫克隆 Dify 源代碼至本地。git clone hts://github.com/langgenius/dify.git啟動 Dify進入 Dify 源代碼的 docker 目錄&#xff0c;執行一鍵啟動命令:cd dify/docker #切換到指定目錄 cp .env.example .env #修改文件名 docker compose up -d #啟動

Android Kotlin 協程全面指南

協程是 Kotlin 提供的一套簡化異步編程的輕量級線程操作框架&#xff0c;特別適合 Android 開發中的異步任務處理。以下是 Android 開發中需要掌握的協程核心知識點&#xff1a;1. 協程基礎概念1.1 協程是什么輕量級線程&#xff1a;比線程更高效&#xff0c;可以在單個線程中運…