Python線程池模塊ThreadPoolExecutor用法分析
本文實例講述了Python線程池模塊ThreadPoolExecutor用法。分享給大家供大家參考,具體如下:
python3內(nèi)置的有Threadingpool和ThreadPoolExecutor模塊,兩個都可以做線程池,當然ThreadPoolExecutor會更好用一些,而且也有ProcessPoolExecutor進程池模塊,使用方法基本一致。
首先導入模塊
from concurrent.futures import ThreadPoolExecutor
使用方法很簡單,最常用的可能就是map方法和submit+as_completed
注意,一定要使用with,而不要使用for,如果你一定要用for,那么一定要手動進行executor.shutdown,而你使用了with方法的話,再with方法內(nèi)部已經(jīng)實現(xiàn)了wait(),在使用完畢之后可以自行關閉線程池,減少資源浪費。
使用map
with ThreadPoolExecutor(max_workers=2) as executor:
result = executor.map(map_fun, itr_arg)
'''map_fun:你傳入的要執(zhí)行的map函數(shù)
itr_arg:一個可迭代的參數(shù),可以是列表字典等可迭代的對象
基本上和python的map函數(shù)一樣
注意result并不是你map_fun返回的結(jié)果,而是一個生成器,如果要從中去結(jié)果,你可以使用列表生成式或者其他你想使用的方法
'''
for res in result:
print(res) #這個res就是你map_fun返回的結(jié)果,你可以在這里做進一步處理
使用submit+as_completed也可以很靈活
with ThreadPoolExecutor(max_workers=2) as executor:
future= executor.submit(fun, args)
'''
在這里你可以使用for循環(huán)來做,返回的是一個future對象
future_list=[]
for i in range(max_workers):
future= executor.submit(fun, args[i])
future_list.append(future)
'''
for res in ac_completed(futrue_list): #這個futrure_list是你future對象的列表
print(res.result()) #循環(huán)遍歷時用.result()來取返回值
兩種方式差不多,都可以很好的實現(xiàn)多線程任務,切記一定使用with!
更多關于Python相關內(nèi)容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》、《Python+MySQL數(shù)據(jù)庫程序設計入門教程》及《Python常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
相關文章
python?列表套json字典根據(jù)相同的key篩選數(shù)據(jù)
這篇文章主要介紹了python?列表套json字典根據(jù)相同的key篩選數(shù)據(jù),文章基于python的相關資料展開詳細的內(nèi)容介紹需要的小伙伴可以參考一下2022-04-04
pytorch的backward()的底層實現(xiàn)邏輯詳解
自動微分是一種計算張量(tensors)的梯度(gradients)的技術,它在深度學習中非常有用,這篇文章主要介紹了pytorch的backward()的底層實現(xiàn)邏輯,需要的朋友可以參考下2023-11-11
python 多線程對post請求服務器測試并發(fā)的方法
今天小編就為大家分享一篇python 多線程對post請求服務器測試并發(fā)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
python selenium 無界面瀏覽器的實現(xiàn)
有時我們不想讓瀏覽器窗口跳出來,而是想在后臺進行操作,這就需要用到無界面瀏覽器,本文主要介紹了python selenium 無界面瀏覽器的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-10-10

