Python多进程显示进度条的优雅方案

今日段子😋 :

林深时见鹿🦌,

海蓝时见鲸🐳,

夜深时见鬼👻。

使用multiprocessing进程池的imap方法,可以将函数依次作用到可迭代对象上各个元素,并发送到多个进程中执行。配合tqdm库,我们可以通过进度条显示多进程代码的整体执行进度!

这是一段非常强大和人性化的代码组合!

一,单参数函数

如果我们要多次执行的函数只有一个参数,这个参数在多进程任务中依次取可迭代对象中各个值,可以参照如下代码范例。


          
            
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))  
  

        

picture.image

二,多参数函数

对于多参数函数,如果我们只想对它的一个参数在多进程任务中依次取可迭代对象中各个值,其他参数固定,可以使用偏函数构造出单参数函数。注意,不可以使用lambda 函数代替偏函数,否则会报局部函数不可序列化的错误。


        
          
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))  

      

picture.image

以上。

picture.image

万水千山总是情,点个在看行不行? 😋 😋

0
0
0
0
评论
未登录
暂无评论