python的線程池和進程池

Python 3.2 就已經引入了 concurrent.futures 模塊,提供了線程池(ThreadPoolExecutor)和進程池(ProcessPoolExecutor),用于簡化并發編程的管理和調度。

ThreadPoolExecutor

在ThreadPoolExecutorconcurrent.futures 模塊提供的類,用于管理和調度線程池。

它的主要作用是:

????????線程管理: 管理多個線程,使得可以并發執行多個任務。

????????任務提交和執行: 可以通過 submit() 方法提交任務(即可調用對象),線程池會自動分配線程來執行任務。

????????結果獲取: 可以通過 Future 對象獲取任務的執行結果或狀態,支持阻塞和非阻塞方式獲取結果。

????????資源控制: 可以控制線程池的大小,包括最大線程數、空閑線程的存活時間等,以優化資源利用和性能。

使用 ThreadPoolExecutor 可以方便地管理大量的并發任務,特別適合于 I/O 密集型任務,網絡請求、文件操作等,因為 Python 的全局解釋器鎖(GIL)會影響多線程并行執行 CPU 密集型任務的效率。

GIL 的作用和機制

鎖的作用: GIL 是一個互斥鎖,它的存在保證了任何時候只有一個線程在解釋器中執行 Python 字節碼。這意味著在多線程環境下,Python 解釋器無法實現真正的并行執行多個線程。即使在多核 CPU 上,Python 解釋器也只能讓一個線程執行,其他線程會被阻塞

影響: GIL 的存在對 CPU 密集型任務有較大影響,因為只有一個線程能夠利用 CPU 資源。但對于 I/O 密集型任務,由于大部分時間線程都在等待外部 I/O 操作完成,GIL 的影響較小,可以通過多線程有效提升并發性能。

適用場景: Python 的 GIL 限制對于多線程并發執行 CPU 密集型任務的效率,因此對于 CPU 密集型任務,建議考慮使用多進程或者其它方式避開 GIL 的影響。

ProcessPoolExecutor

ProcessPoolExecutorThreadPoolExecutor 類似,但是它管理的是進程池而不是線程池。

主要特點包括:

????????進程管理: 管理多個進程,每個進程都有自己獨立的 Python 解釋器和 GIL,因此能夠更好地利用多核 CPU。

????????任務提交和執行: 提交任務與 ThreadPoolExecutor 類似,可以通過 submit() 方法提交可調用對象(如函數),進程池會自動分配進程來執行任務。

????????結果獲取: 同樣可以通過 Future 對象獲取任務的執行結果或狀態。

????????獨立內存空間: 每個進程擁有獨立的內存空間,不會像線程那樣共享內存,因此更安全,但也需要更多的系統資源。

ProcessPoolExecutor 適合于 CPU 密集型任務,如數值計算、圖像處理等,能夠充分利用多核處理器的優勢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42111.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42111.shtml

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

相關文章

簡易Qt串口助手

界面顯示如下 關于串口類 初始化 設置串口號 設置波特率 打開串口 發送按鈕功能實現 接收數據顯示在控件中 關閉串口

使用 MFA 保護對企業應用程序的訪問

多因素身份驗證(MFA)是在授予用戶訪問特定資源的權限之前,使用多重身份驗證來驗證用戶身份的過程,僅使用單一因素(傳統上是用戶名和密碼)來保護資源,使它們容易受到破壞,添加其他身份…

springboot非物質文化遺產管理系統-計算機畢業設計源碼16087

目錄 摘要 1 緒論 1.1 選題背景與意義 1.2國內外研究現狀 1.3論文結構與章節安排 2系統分析 2.1 可行性分析 2.2 系統流程分析 2.2.1系統開發流程 2.2.2 用戶登錄流程 2.2.3 系統操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 刪除信息流程 2.3 系統功能…

前端開發過程中經常遇到的問題以及對應解決方法 (持續更新)

我的朋友已經工作了 3 年,他過去一直擔任前端工程師。 不幸的是,他被老板批評了,因為他在工作中犯了一個錯誤,這是一個非常簡單但容易忽視的問題,我想也是很多朋友容易忽視的一個問題。 今天我把它分享出來&#xff…

Linux三劍客(grep、awk和sed)操作及與管道結合使用

1. 總覽 grep、sed和awk被稱為Linux三劍客,是因為它們在文本處理和數據操作方面極其強大且常用。 Linux三劍客在文件處理中的作用: grep(數據查找定位):文本搜索工具,在文件中搜索符合正則表達式的文本內容…

Redis原理-數據結構

Redis原理篇 1、原理篇-Redis數據結構 1.1 Redis數據結構-動態字符串 我們都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可見字符串是Redis中最常用的一種數據結構。 不過Redis沒有直接使用C語言中的字符串,因為C語言字符串存…

【大模型LLM面試合集】大語言模型架構_attention

1.attention 1.Attention 1.1 講講對Attention的理解? Attention機制是一種在處理時序相關問題的時候常用的技術,主要用于處理序列數據。 核心思想是在處理序列數據時,網絡應該更關注輸入中的重要部分,而忽略不重要的部分&…

BJT的結構(晶體管電壓/電流+β+晶體管特性曲線/截止與飽和+直流負載線(Q點))+單片機數碼管基礎

2024-7-8,星期一,20:23,天氣:晴,心情:晴。今天沒有什么特殊的事情發生,周末休息了兩天,周一回來繼續學習啦,加油加油!!! 今日完成模電…

視頻號矩陣管理系統:短視頻內容營銷的智能助手

隨著短視頻行業的蓬勃發展,視頻號矩陣管理系統應運而生,為內容創作者和品牌提供了一站式的短視頻管理和營銷解決方案。本文將深入探討視頻號矩陣管理系統的核心功能,以及它如何助力用戶在短視頻營銷領域取得成功。 視頻號矩陣管理系統概述 …

在PyTorch中使用TensorBoard

文章目錄 在PyTorch中使用TensorBoard1.安裝2.TensorBoard使用2.1創建SummaryWriter實例2.2利用add_scalar()記錄metrics2.3關閉Writer2.4啟動TensorBoard 3.本地連接服務器使用TensorBoard3.1方法一:使用SSH命令進行本地端口轉發3.2方法二:啟動TensorBo…

Python 全棧體系【三階】(二)

第一章 Django 五、模板 1. 概述 Django中的模板是指可以動態生成任何基于文本格式文件的技術(如HTML、CSS等)。 Django中內置了自己的模板系統,稱為DTL(Django Template Language), Django模板語言。 2. 配置 settings.py中關于模板的…

如何將資源前端通過 Docker 部署到遠程服務器

作為一個程序員,在開發過程中,經常會遇到項目部署的問題,在現在本就不穩定的大環境下,前端開發也需要掌握部署技能,來提高自己的生存力,今天就詳細說一下如何把一個前端資源放到遠程服務器上面通過docker部…

紫外線芯片殺菌燈問題

1.265nm深紫外光子能量是多少 504kj/mol 2.紫外光分解有害物質的原理是什么? 通過紫外光分子鍵打斷有害物質的分子鍵,使其分解成co2和H2o等無害物質 3.紫外光殺菌的原理是什么? 通過特定波長的紫外光照射,破壞和改變微生物的…

【網絡協議】PIM

PIM 1 基本概念 PIM(Protocol Independent Multicast)協議,即協議無關組播協議,是一種組播路由協議,其特點是不依賴于某一特定的單播路由協議,而是可以利用任意單播路由協議建立的單播路由表完成RPF&…

【Python】不小心卸載pip后(手動安裝pip的兩種方式)

文章目錄 方法一:使用get-pip.py腳本方法二:使用easy_install注意事項 不小心卸載pip后:手動安裝pip的兩種方式 在使用Python進行開發時,pip作為Python的包管理工具,是我們安裝和管理Python庫的重要工具。然而&#x…

產品經理技能揭秘:如何巧妙啟發需求,引領市場新潮流

文章目錄 引言一、需求啟發的定義二、需求啟發的藝術三、需求啟發的重要性四、需求啟發的流程五、需求啟發的問題與挑戰內部自身的問題與挑戰:挑戰一:知識的詛咒挑戰二:做與定義的不同挑戰三:溝通障礙挑戰四:需求變更頻…

solidity:構造函數和修飾器、事件

構造函數? 構造函數(constructor)是一種特殊的函數,每個合約可以定義一個,并在部署合約的時候自動運行一次。它可以用來初始化合約的一些參數,例如初始化合約的owner地址: address owner; // 定義owner變…

電腦找回徹底刪除文件?四個實測效果的方法【一鍵找回】

電腦數據刪除了還能恢復嗎?可以的,只要我們及時撤銷上一步刪除操作,還是有幾率找回徹底刪除文件。 當我們的電腦文件被徹底刪除后,盡管恢復的成功率可能受到多種因素的影響,但仍有幾種方法可以嘗試找回這些文件。本文整…

使用 docker buildx 構建跨平臺鏡像

buildx是Docker官方提供的一個構建工具,它可以幫助用戶快速、高效地構建Docker鏡像,并支持多種平臺的構建。使用buildx,用戶可以在單個命令中構建多種架構的鏡像,例如x86和arm架構,而無需手工操作多個構建命令。此外bu…

【React Hooks原理 - useCallback、useMemo】

介紹 在實際項目中,useCallback、useMemo這兩個Hooks想必會很常見,可能我們會處于性能考慮避免組件重復刷新而使用類似useCallback、useMemo來進行緩存。接下來我們會從源碼和使用的角度來聊聊這兩個hooks。【源碼地址】 為什么要有這兩個Hooks 在開始…