python 底层原理processpoolexecutor_python 多进程并行编程 ProcessPoolExecutor的实现
使用 ProcessPoolExecutor
from concurrent.futures import ProcessPoolExecutor, as_completed
import random
斐波那契數(shù)列
當(dāng) n 大于 30 時拋出異常
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.
'''
等價寫法:
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ù)組的順序
缺點:某一子進(jìn)程異常會導(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í)有所幫助,也希望大家多多支持聚米學(xué)院。
總結(jié)
以上是生活随笔為你收集整理的python 底层原理processpoolexecutor_python 多进程并行编程 ProcessPoolExecutor的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中信银行信用卡申请被拒 几招教你成功申卡
- 下一篇: python中with open写csv