python多進(jìn)程并發(fā)的實(shí)現(xiàn)示例
虛假的并發(fā),當(dāng)你調(diào)用future.result()時(shí),它會(huì)阻塞當(dāng)前線程,直到任務(wù)完成并返回結(jié)果。因此,當(dāng)你在循環(huán)中調(diào)用future.result()時(shí),程序會(huì)按順序執(zhí)行任務(wù),而不是并發(fā)執(zhí)行。
import concurrent.futures
import time
# 創(chuàng)建一個(gè)進(jìn)程池
process_pool = concurrent.futures.ProcessPoolExecutor(max_workers=8)
# 定義任務(wù)函數(shù)
def task_function(task_id):
print(f"Task {task_id} started")
# 執(zhí)行任務(wù)的邏輯
time.sleep(1)
print(f"Task {task_id} completed")
return 1
# 提交任務(wù)到進(jìn)程池
def submit_task(task_id):
future = process_pool.submit(task_function, task_id)
return future
# 示例任務(wù)列表
task_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = []
# 提交任務(wù)到進(jìn)程池,并等待任務(wù)完成
futures = []
t1 =time.time()
for task_id in task_list:
future = submit_task(task_id)
futures.append(future)
# result.append(future.result())
# 等待進(jìn)程池中的任務(wù)完成
concurrent.futures.wait(futures)
# 關(guān)閉進(jìn)程池
t2 = time.time()
print(t2-t1,"s")
process_pool.shutdown()
print(result)
如果你想要實(shí)現(xiàn)并發(fā)執(zhí)行任務(wù),并且在所有任務(wù)完成后獲取結(jié)果,可以使用concurrent.futures.as_completed()方法來(lái)實(shí)現(xiàn)。這個(gè)方法返回一個(gè)迭代器,可以按照任務(wù)完成的順序獲取結(jié)果。
import concurrent.futures
import time
# 創(chuàng)建一個(gè)進(jìn)程池
process_pool = concurrent.futures.ProcessPoolExecutor(max_workers=8)
# 定義任務(wù)函數(shù)
def task_function(task_id):
print(f"Task {task_id} started")
# 執(zhí)行任務(wù)的邏輯
time.sleep(1)
print(f"Task {task_id} completed")
return task_id
# 提交任務(wù)到進(jìn)程池
def submit_task(task_id):
future = process_pool.submit(task_function, task_id)
return future
# 示例任務(wù)列表
task_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = []
# 提交任務(wù)到進(jìn)程池,并等待任務(wù)完成
futures = []
t1 = time.time()
for task_id in task_list:
future = submit_task(task_id)
futures.append(future)
# 獲取任務(wù)結(jié)果
for future in concurrent.futures.as_completed(futures):
result.append(future.result())
t2 = time.time()
print(t2 - t1, "s")
print(result)
# 關(guān)閉進(jìn)程池
process_pool.shutdown()
到此這篇關(guān)于python多進(jìn)程并發(fā)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)python多進(jìn)程并發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用latexify模塊實(shí)現(xiàn)將代碼為數(shù)學(xué)公式
latexify 是一個(gè)輕量級(jí)的 Python 模塊,可以將 Python 代碼轉(zhuǎn)換為 LaTeX 格式的數(shù)學(xué)表達(dá)式,這篇文章就來(lái)和大家探索一下如何使用latexify模塊實(shí)現(xiàn)將代碼為數(shù)學(xué)公式吧2023-12-12
Python圖像銳化與邊緣檢測(cè)之Sobel與Laplacian算子詳解
圖像銳化和邊緣檢測(cè)主要包括一階微分銳化和二階微分銳化,本文主要講解常見(jiàn)的圖像銳化和邊緣檢測(cè)方法,即Sobel算子和Laplacian算子,感興趣的可以了解一下2022-12-12
python實(shí)現(xiàn)PID算法及測(cè)試的例子
今天小編就為大家分享一篇python實(shí)現(xiàn)PID算法及測(cè)試的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
python利用TextBlob庫(kù)實(shí)現(xiàn)輕松分析文本情感
TextBlob是一個(gè)基于NLTK(Natural Language Toolkit)和Pattern庫(kù)的Python庫(kù),它提供了一系列方便的接口和方法來(lái)處理文本數(shù)據(jù),下面我們就來(lái)學(xué)習(xí)一下如何利用TextBlob庫(kù)實(shí)現(xiàn)輕松分析文本情感吧2023-12-12
python實(shí)現(xiàn)字符串逆序輸出的幾種方法
本文介紹了四種在Python中實(shí)現(xiàn)字符串逆序輸出的方法,每種方法都有其優(yōu)缺點(diǎn),下面就來(lái)介紹一下如何使用,感興趣的可以了解一下2024-12-12
編寫(xiě)Python小程序來(lái)統(tǒng)計(jì)測(cè)試腳本的關(guān)鍵字
這篇文章主要介紹了編寫(xiě)Python小程序來(lái)統(tǒng)計(jì)測(cè)試腳本的關(guān)鍵字的方法,文中的實(shí)例不僅可以統(tǒng)計(jì)關(guān)鍵字?jǐn)?shù)量,還可以按主關(guān)鍵字來(lái)歸類(lèi),需要的朋友可以參考下2016-03-03

