用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]
这样的乱序结果)。
使用多进程的时候, 往往也想知道代码的运行进度, 还需要多久。 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
关注
打赏
热门博文
- ADMM算法的应用: 降低SDP算法复杂度
- QR分解以及最小二乘求解
- Joint Tx-Rx Beamforming Design for Multicarrier MIMO Channels: A Unified Framework (2)
- Joint Tx-Rx Beamforming Design for Multicarrier MIMO Channels: A Unified Framework (1)
- 置换矩阵的应用:逆矩阵的对角线元素求法
- 多用户MIMO系统预编码:广义矩阵求逆法
- 低秩矩阵近似求解
- 再探矩阵求逆引理 : Woodbury恒等式的证明
- 关于SDP的凸性与拉格朗日函数
- logdet函数的凹凸性和遍历速率