我第一次尝试并行化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])
感谢您的帮助。
答案 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
实际上返回的列表中。