【使用python多进程加速程序】multiprocessing与 tqdm 实现多进程

用multiprocessing库的map方法实现多进程

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

这是官网的示例。
Pool(5)中的5指的是要开的进程数。
p.map()的用法就是, 输入两个参数, 第一个参数是你要执行的函数, 第二个参数则是需要被执行的参数列表。 p.map()将负责把列表中的元素一个个作为要执行函数的输入参数,执行函数。

上述代码的输出结果为: [1,4,9]。 即.map()函数的返回值就是将每个元素输入执行函数后的返回值用列表的形式, 返回这个列表。

注意,尽管你需要遍历的参数列表可能被分配到了多个进程中同时运行,但p.map()函数会非常智能地仍按照你参数列表的顺序, 输出对应的结果。 (所以你不会得到[1, 9, 4]这样的乱序结果)。

用tqdm和imap实现多进程进度监控

使用多进程的时候, 往往也想知道代码的运行进度, 还需要多久。
python里最简便的进度条监视库就是tqdm了。
然而直接使用tqdm往往只能监测单进程, 多进程时就不行了。

这时候,就该表演真正的技术了!

例子:

from multiprocessing import Pool
from tqdm import tqdm


def f(x):
    return x * x


if __name__ == '__main__':
    with Pool(5) as p:
        print(list((tqdm(p.imap(f, range(10)), total=10, desc='监视进度'))))

输出结果为:

监视进度: 100%|██████████| 10/10 [00:00<00:00, 43.03it/s]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

就实现了和单进程里一样的监视效果, 极为实用!

其中, 要将.map()方法修改为.imap()方法,然后total参数代表总数目,desc里面可以加入文字。

总结

建议大家用.map()方法开启多进程加速代码, 把对每一个元素要进行的操作写成一个函数, 再把要遍历的所有元素放入一个列表来传输, 返回值得到一个列表, 非常方便。

需要用tqdm监视时, 将p.map()改为p.imap()

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B417科研笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值