Joblib庫多進程/線程使用(一):使用generator參數實現邊響應邊使用

?進程與線程的基本概念

特性進程 (Process)線程 (Thread)
定義

操作系統分配資源的基本單位(獨立的內存空間)

多進程可真正并行(利用多核 CPU)

進程內的執行單元(共享進程資源)
獨立性完全獨立,崩潰后不影響其他進程共享進程資源,一個線程崩潰可能導致整個進程崩潰

資源開銷

高(需要分配獨立的內存、文件句柄等)

不可直接共享,需通過 IPC(如管道、共享內存)

低(共享進程資源,僅需少量棧和寄存器)

可直接訪問全局變量(需同步機制避免競爭)

數據共享必須通過 IPC(進程間通信):<br>?- 管道(Pipe)<br>?- 共享內存(Shared Memory)<br>?- 消息隊列(Queue)直接共享進程內存(需鎖機制)
同步機制通常不需要需要鎖(Lock)、信號量(Semaphore)等。
場景進程線程
CPU 密集型任務
(如數值計算、機器學習)
? 多進程(繞過 GIL,利用多核)。? 多線程(受 GIL 限制,無法并行計算)。
I/O 密集型任務
(如網絡請求、文件讀寫)
?? 可用,但資源開銷高。? 多線程(輕量級,等待 I/O 時可切換任務)。
需要高隔離性? 進程崩潰不影響其他進程。? 線程崩潰可能拖垮整個進程。

Joblib庫

基礎Parallel并行處理

n_jobs:設置并行運行的作業數。

verbose:設置后端的詳細程度。

prefer:設置要使用的首選后端。可以是“processes”(進程)或“threads”(線程)。

require:設置對后端的請求。可以是“sharedmem”(共享內存)。

inner_max_num_threads:限制第三方庫使用的最大線程數,這些庫管理它們自己的 C 級線程池。此參數僅受 backend 支持,這些 backend 將 supports_inner_max_num_threads 類屬性設置為 True,例如“loky”后端。

temp_folder、max_nbytes、mmap_mode:控制后端的自動內存映射行為。有關更多詳細信息,請參閱在共享內存(內存映射)中使用數值數據

def process_row(row,idx,function):print('已經進入processrow')result = function(row)#print(f"處理完成 #{idx}: {str(result)[:50]}...")print(f"處理完成 #{idx}")result_clean=json_repair.loads(result)return result_clean# 使用Parallel進行并行處理,并添加verbose參數(日志詳細程度)
results0= Parallel(n_jobs=10, verbose=10)(delayed(process_row)(row, i,function) for i, row in data0.iterrows()
)

通過Parallel的return_as參數,實現結果的即使反饋

return_as="generator"

輸出可以是一個生成器,它會盡快返回可用的結果,即使后續任務尚未完成。輸出的順序始終與輸入提交的順序一致

return_as="generator_unordered"?

在這種情況下,輸出的順序取決于workers的并發情況,并且是不確定的,這意味著每次執行代碼時結果的順序可能不同。

傳統的?Parallel(...)(...)?會先把所有任務結果收集完,再一次性返回一個?list。當任務數量大、單個結果對象很大時,可能導致內存占用暴漲,甚至 OOM(內存溢出)。

使用?return_as="generator"?則:1.每次只保留一個任務的結果在內存中 2.避免累積數百/數千個中間結果。

注意事項

generator使用過比如next/list()后無法回到上一個狀態,想要關閉的話使用.close()

環境準備

首先可以更新一下joblib包,1.0.1版本的是不支持return_as的參數的

import joblib
print(joblib.__version__)
!pip install --upgrade joblib

Embarrassingly parallel for loops — joblib 1.6.dev0 documentation

可以參考文檔測試一下代碼

from math import sqrt
from joblib import Parallel, delayed
parallel = Parallel(n_jobs=2, return_as="generator")
output_generator = parallel(delayed(sqrt)(i ** 2) for i in range(10))
print(type(output_generator))
print(next(output_generator))
print(next(output_generator))
print(list(output_generator))

?實現中斷后可以繼續處理未處理的數據

import os
import json
import pandas as pd
from joblib import Parallel, delayed
import json_repair# 假設這個是你已有的 DataFrame
# data0 = pd.read_csv(...) 或別的方式加載SAVE_DIR = "results_json"
os.makedirs(SAVE_DIR, exist_ok=True)# 檢查是否已處理過
def has_processed(idx):return os.path.exists(os.path.join(SAVE_DIR, f"{idx}.json"))# 每一行任務的處理函數
def process_row(row, idx, openai_thinking_is_match):if has_processed(idx):print(f"跳過 #{idx}:已存在結果")return Noneprint(f"開始處理 #{idx}")result = openai_thinking_is_match(row)print(f"處理完成 #{idx}")result_clean = json_repair.loads(result)# 保存結果到獨立文件with open(os.path.join(SAVE_DIR, f"{idx}.json"), "w", encoding="utf-8") as f:json.dump(result_clean, f, ensure_ascii=False, indent=2)return result_clean# 執行并行任務parallel = Parallel(n_jobs=50, return_as="generator", verbose=10)output_generator = parallel(delayed(process_row)(row, idx, function)for idx, row in data0.iterrows())# 可選:邊執行邊消費for _ in output_generator:pass

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

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

相關文章

css上下滾動文字

效果圖 取得是數組里的數據 上下滾動切換 css .notice-new {background: #222222;border-radius: 19rpx;margin-top: 28rpx;font-size: 24rpx;color: white;font-weight: 500;padding: 0 20rpx;height: 55rpx;line-height: 55rpx;overflow: hidden;.notice-scroll-wrapper {pos…

概念篇: 01-帶你認識Dockerfile

在本篇文章中&#xff0c;我們將帶你認識 Dockerfile —— 構建 Docker 鏡像的"藍圖"。我們會介紹它的基本概念和常用指令&#xff0c;幫助你理解如何使用它來打包你的應用。 簡單了解 Docker&#xff08;背景知識&#xff09; 在我們深入 Dockerfile 之前&#xf…

技術倫理之爭:OpenAI陷抄襲風波,法院強制下架宣傳視頻

在AI巨頭OpenAI宣布以65億美元天價收購蘋果前設計總監Jony Ive的硬件公司IO僅一個月后&#xff0c;一場抄襲指控將這家科技明星企業推上風口浪尖。 源自谷歌X實驗室的初創企業IYO將OpenAI告上法庭&#xff0c;指控其竊取智能耳塞核心技術&#xff0c;并通過巨額收購試圖掩蓋抄襲…

前沿解讀:缺陷如何操控二維半導體中的電子摩擦耗散超快動力學

摩擦能耗約占全球一次能源損耗的1/3&#xff0c;在微納器件中尤為突出。二維半導體&#xff08;如WS?&#xff09;因其獨特的電子特性成為研究熱點&#xff0c;但電子摩擦的動態機制因電子行為的超快特性長期難以捕捉。近期清華團隊在Nature Communications發表的研究[1]&…

什么是物聯網 (IoT)?

你家是否安裝了智能恒溫器&#xff1f;或者你屬于三分之一的美國健身追蹤器用戶&#xff0c;通過設備記錄運動習慣&#xff1f;如果是&#xff0c;你已在使用物聯網技術。這項技術不僅融入日常生活&#xff0c;更深刻改變著組織的運營方式。物聯網通過多種技術連接數字與物理世…

[特殊字符] Windows 查看端口占用及服務來源教程(以 9018 端口為例)

下面是一份詳細的 Windows 系統中排查 某端口&#xff08;如 9018&#xff09;被哪個程序占用 并確定其具體服務來源的完整教程&#xff0c;適合用于日常運維、開發部署排障等場景。 &#x1f3af; Windows 查看端口占用及服務來源教程&#xff08;以 9018 端口為例&#xff09…

異步爬蟲 原理與解析

先遍歷100遍一個程序 import requests import logging import timelogging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s: %(message)s) TOTAL_NUMBER 100 BASE_URL https://ssr4.scrape.center/start_time time.time() for id in range(1,TOTAL_NUM…

vscode管理go多個版本

#1.下載go安裝包 https://developer.aliyun.com/mirror/golang/?spma2c6h.25603864.0.0.55ea7c45IsI4GM # 2.創建 sdk 目錄&#xff08;如果不存在&#xff09; mkdir -p ~/sdk # 3.解壓下載的 go1.16.15 到 ~/sdk/ tar -C ~/sdk -xzf go1.16.15.linux-amd64.tar.gz # 4.重…

香港維爾利健康科技集團推出AI輔助醫學影像訓練平臺,助力醫護人才數字化轉型

香港維爾利健康科技集團近日正式發布其自主研發的“AI輔助醫學影像訓練平臺&#xff08;V-MedTrain&#xff09;”&#xff0c;這一創新平臺的上線&#xff0c;標志著醫學影像教育邁入智能化輔助教學新時代。依托人工智能與大數據分析技術&#xff0c;香港維爾利健康科技集團在…

互聯網+醫療,醫療服務的全方位革新

近年來&#xff0c;互聯網醫療行業迅速崛起&#xff0c;為醫療健康服務帶來了翻天覆地的變革。新模式、新業態層出不窮&#xff0c;不僅大幅提升了醫療健康服務的可及性&#xff0c;也使得群眾就醫體驗更為舒適、便捷。互聯網技術的廣泛應用&#xff0c;不僅改變了醫療核心業務…

酒店智能門鎖系統常見問題解決方法——東方仙盟

重做系統后 usb發卡器與注冊時發卡器不一致 解決發方法: 用總卡重新注冊軟件,要可以開房間的總卡 房號不存在 2聲---正確提示&#xff0c;表示是設置卡 3聲---門鎖已反鎖&#xff0c;解決方法&#xff1a;用能開反鎖的卡或解除反鎖 6聲---房號不對&#xff0c;解決方法&#…

從零開始理解百度語音識別API的Python實現

大家好&#xff01;今天我要給大家詳細講解一個使用百度語音識別API的Python代碼。這個代碼可以將音頻文件轉換成文字&#xff0c;非常適合做語音轉文字的應用。我會從最基礎的概念開始講起&#xff0c;確保沒有任何編程基礎的朋友也能理解。 翻譯 一、代碼概覽 這段代碼主要…

中小企業適用的幾種會議簽到工具

對企業行政來說&#xff0c;會議簽到是件小事&#xff0c;但處理不好&#xff0c;會直接拖慢會議流程、影響管理效率、降低參會體驗。尤其是面對人數多、時間緊、場地臨時變動等情況&#xff0c;靠傳統紙筆或簡單Excel管理&#xff0c;往往應對乏力。 實際上&#xff0c;簽到看…

android 11.0 打開ALOGV ALOGI ALOGD日志輸出的方法

1.前言 在11.0的系統rom定制化開發中,在某些時候,需要打印ALOGV,ALOGI等TAG日志,在系統中,默認是關閉這些日志的, 防止日志打印過多,系統過于卡頓,但是有時候會為了調試,需要打開日志開關,所以就需要在系統源碼中查看哪里 需要打開日志的開關,來實現日志的打印解決…

語言大模型or時序大模型?原理、應用與未來發展

引言 隨著人工智能技術的飛速發展&#xff0c;大規模預訓練模型已成為當前研究的熱點。其中&#xff0c;語言模型和時序大模型作為兩類重要的模型架構&#xff0c;分別在自然語言處理和時間序列分析領域展現出卓越的性能。然而&#xff0c;這兩類模型在基本原理和應用場景上存…

【Excel數據分析】花垣縣事業單位出成績了,用Excel自帶的M語言做一個數據分析

這里寫自定義目錄標題 花垣縣事業單位出成績了&#xff0c;用Excel自帶的M語言做一個數據分析需求 花垣縣事業單位出成績了&#xff0c;用Excel自帶的M語言做一個數據分析 Power Query M 語言&#xff0c;簡稱 M 語言&#xff0c;全名叫 Power Query Formula Language。 需求…

微處理器原理與應用篇---音頻采集與串口傳輸功能的系統設計

這段內容是基于 STM32F407VGT6 單片機&#xff0c;實現音頻采集與串口傳輸功能的嵌入式系統設計方案&#xff0c;包含硬件架構、軟件邏輯和代碼實現&#xff0c;核心是通過 ADC 采集音頻、串口收發指令與數據 &#xff0c;以下分模塊拆解&#xff1a; 一、系統設計概述 硬件&…

【大模型學習 | 量化】pytorch量化基礎知識(1)

pytorch量化 [!note] 官方定義&#xff1a;performing computations and storing tensors at lower bitwidths than floating point precision.支持INT8量化&#xff0c;可以降低4倍的模型大小以及顯存需求&#xff0c;加速2-4倍的推理速度通俗理解&#xff1a;降低權重和激活值…

ES和 Kafka 集群搭建過程中的典型問題、配置規范及最佳實踐

Kafka 集群搭建與配置經驗庫文檔&#xff08;完整會話匯總&#xff09; 一、會話問題分類與解決方案 1. Elasticsearch 映射解析錯誤 問題現象&#xff1a; {"error":{"root_cause":[{"type":"mapper_parsing_exception","re…

Linux-信號量

目錄 POSIX信號量 信號量的原理 信號量的概念 申請信號量失敗被掛起等待 信號量函數 二元信號量模擬實現互斥功能 基于環形隊列的生產消費模型 下面環形隊列采用數組模擬&#xff0c;用模運算來模擬環狀特性&#xff0c;類似如此 空間資源和數據資源 生產者和消費者申請…