今日段子:

林深时见鹿,

海蓝时见鲸, 

夜深时见鬼。

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


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

二,多参数函数

对于多参数函数,如果我们只想对它的一个参数在多进程任务中依次取可迭代对象中各个值,其他参数固定,可以使用偏函数构造出单参数函数。注意,不可以使用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))

Python多进程显示进度条的优雅方案_迭代_02

以上。


Python多进程显示进度条的优雅方案_迭代_03


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