python 多進(jìn)程并行編程 ProcessPoolExecutor的實(shí)現(xiàn)
使用 ProcessPoolExecutor
from concurrent.futures import ProcessPoolExecutor, as_completed import random
斐波那契數(shù)列
當(dāng) n 大于 30 時(shí)拋出異常
def fib(n): if n > 30: raise Exception('can not > 30, now %s' % n) if n <= 2: return 1 return fib(n-1) + fib(n-2)
準(zhǔn)備數(shù)組
nums = [random.randint(0, 33) for _ in range(0, 10)] ''' [13, 17, 0, 22, 19, 33, 7, 12, 8, 16] '''
方案一:submit
submit 輸出結(jié)果按照子進(jìn)程執(zhí)行結(jié)束的先后順序,不可控
with ProcessPoolExecutor(max_workers=3) as executor: futures = {executor.submit(fib, n):n for n in nums} for f in as_completed(futures): try: print('fib(%s) result is %s.' % (futures[f], f.result())) except Exception as e: print(e) ''' fib(13) result is 233. fib(17) result is 1597. fib(0) result is 1. fib(22) result is 17711. fib(19) result is 4181. can not > 30, now 33 fib(7) result is 13. fib(12) result is 144. fib(8) result is 21. fib(16) result is 987. '''
等價(jià)寫法:
with ProcessPoolExecutor(max_workers=3) as executor: futures = {} for n in nums: job = executor.submit(fib, n) futures[job] = n for job in as_completed(futures): try: re = job.result() n = futures[job] print('fib(%s) result is %s.' % (n, re)) except Exception as e: print(e) ''' fib(13) result is 233. fib(17) result is 1597. fib(0) result is 1. fib(22) result is 17711. can not > 30, now 33 fib(7) result is 13. fib(19) result is 4181. fib(8) result is 21. fib(12) result is 144. fib(16) result is 987. '''
方案二:map
map 輸出結(jié)果按照輸入數(shù)組的順序
缺點(diǎn):某一子進(jìn)程異常會(huì)導(dǎo)致整體中斷
with ProcessPoolExecutor(max_workers=3) as executor: try: results = executor.map(fib, nums) for num, result in zip(nums, results): print('fib(%s) result is %s.' % (num, result)) except Exception as e: print(e) ''' fib(13) result is 233. fib(17) result is 1597. fib(0) result is 1. fib(22) result is 17711. fib(19) result is 4181. can not > 30, now 33 '''
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
pytorch中 gpu與gpu、gpu與cpu 在load時(shí)相互轉(zhuǎn)化操作
這篇文章主要介紹了pytorch模型載入之gpu和cpu互轉(zhuǎn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python Websocket服務(wù)端通信的使用示例
這篇文章主要介紹了Python Websocket服務(wù)端通信的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python數(shù)據(jù)分析從入門到進(jìn)階之分類算法全面教程
數(shù)據(jù)分析是處理和解釋數(shù)據(jù)以發(fā)現(xiàn)有用信息和洞察的過程,其中,分類算法是數(shù)據(jù)分析領(lǐng)域的一個(gè)重要組成部分,它用于將數(shù)據(jù)分為不同的類別或組,本文將介紹分類算法的基本概念和進(jìn)階技巧,以及如何在Python中應(yīng)用這些算法,包括示例代碼和實(shí)際案例2023-11-11Jupyter Notebook 如何修改字體和大小以及更改字體樣式
這篇文章主要介紹了Jupyter Notebook 如何修改字體和大小以及更改字體樣式的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06分享4個(gè)方便且好用的Python自動(dòng)化腳本
自動(dòng)化測試是把以人為驅(qū)動(dòng)的測試行為轉(zhuǎn)化為機(jī)器執(zhí)行的一種過程,直白的就是為了節(jié)省人力、時(shí)間或硬件資源,提高測試效率,這篇文章主要給大家分享介紹了3個(gè)方便且好用的Python自動(dòng)化腳本,需要的朋友可以參考下2022-02-02python?dataframe獲得指定行列實(shí)戰(zhàn)代碼
對于一個(gè)DataFrame,常常需要篩選出某列為指定值的行,下面這篇文章主要給大家介紹了關(guān)于python?dataframe獲得指定行列的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12Python按條件刪除Excel表格數(shù)據(jù)的方法(示例詳解)
本文介紹基于Python語言,讀取Excel表格文件,基于我們給定的規(guī)則,對其中的數(shù)據(jù)加以篩選,將不在指定數(shù)據(jù)范圍內(nèi)的數(shù)據(jù)剔除,保留符合我們需要的數(shù)據(jù)的方法,感興趣的朋友跟隨小編一起看看吧2024-08-08Python使用騰訊云API實(shí)現(xiàn)短信驗(yàn)證碼功能
使用Python與騰訊云接口對接,實(shí)現(xiàn)短信驗(yàn)證碼功能變得非常簡單,只需要幾行代碼就能夠輕松實(shí)現(xiàn)短信的發(fā)送,無須關(guān)心復(fù)雜的短信協(xié)議和底層實(shí)現(xiàn),讀者可以根據(jù)自己的實(shí)際需求,靈活使用騰訊云短信SDK提供的API來實(shí)現(xiàn)更豐富的短信功能2024-01-01