与“ for循环”并行

时间:2019-12-10 21:49:57

标签: for-loop parallel-processing

我第一次尝试并行化python中的for循环。

这是我原来的for循环:

for i in sequences:
  wchk_matrix(i, 2, wchk)

该函数应遍历序列并更新矩阵“ wchk”。 问题是我有1000个序列,所以它变慢了一点。 这就是为什么我想并行化它,有人有人知道如何实现吗?

我尝试了类似的方法,但是没有用:

with mp.Pool(4) as pool:
  pool.map(wchk_matrix, [wchk_matrix(i, 2, wchk) for i in sequences])

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

来自multiprocessing library documentation

  
      
  • map(func, iterable[, chunksize])

         

    map()内置函数的并行等效项(它仅支持一个可迭代的参数,有关多个可迭代项,请参见starmap() )。

      
  • starmap(func, iterable[, chunksize])

         

    map()类似,只是可迭代的元素应是作为参数解压缩的可迭代。

         

    因此,[(1,2), (3, 4)]的可迭代结果为[func(1,2), func(3,4)]

         

    3.3版中的新功能。

  •   

wchk_matrix需要三个参数,因此您需要创建一个具有三个值的元组列表:

with mp.Pool(4) as pool:
  pool.starmap(wchk_matrix, [(i, 2, wchk) for i in sequences])

但是请注意,一旦多次复制数据以填充列表,并且每次解释器为Pool创建派生文件时,对wchk的任何就地修改都将被忽略。最好的办法是计算值并返回,因此将所有结果收集在starmap实际上返回的列表中。

相关问题