Python多進(jìn)程顯示進(jìn)度條的優(yōu)雅方案
今日段子?? :
林深時見鹿??,
海藍(lán)時見鯨??,
夜深時見鬼??。
使用multiprocessing進(jìn)程池的imap方法,可以將函數(shù)依次作用到可迭代對象上各個元素,并發(fā)送到多個進(jìn)程中執(zhí)行。配合tqdm庫,我們可以通過進(jìn)度條顯示多進(jìn)程代碼的整體執(zhí)行進(jìn)度!
這是一段非常強(qiáng)大和人性化的代碼組合!
一,單參數(shù)函數(shù)
如果我們要多次執(zhí)行的函數(shù)只有一個參數(shù),這個參數(shù)在多進(jìn)程任務(wù)中依次取可迭代對象中各個值,可以參照如下代碼范例。
from multiprocessing import Pool
from tqdm import tqdm
import math
import numpy as np
def func(x):
return math.sin(x)+math.cos(x)
with Pool(processes = 20) as pool:
result = list(tqdm(pool.imap(func, np.linspace(0,2*math.pi,1000)), total=1000))

二,多參數(shù)函數(shù)
對于多參數(shù)函數(shù),如果我們只想對它的一個參數(shù)在多進(jìn)程任務(wù)中依次取可迭代對象中各個值,其他參數(shù)固定,可以使用偏函數(shù)構(gòu)造出單參數(shù)函數(shù)。注意,不可以使用lambda 函數(shù)代替偏函數(shù),否則會報局部函數(shù)不可序列化的錯誤。
from multiprocessing import Pool
from tqdm import tqdm
import numpy as np
import math
import time
from functools import partial
def func(x,y):
time.sleep(0.1)
return math.sin(x)+math.cos(y)
with Pool(processes = 20) as pool:
result = list(tqdm(pool.imap(partial(func,y = math.pi), np.linspace(0,2*math.pi,1000)), total=1000))

以上。
萬水千山總是情,點(diǎn)個在看行不行??? ??
評論
圖片
表情
