所以,我有3维列表。例如:
if .. return Ordering ...;
我想独立处理A中的每个2维列表,但它们都有相同的过程。如果按顺序执行,我会这样做:
A=[[[1,2,3],[4,5,6],[7,8,9]],...,[[2,4,1],[1,4,6],[1,2,4]]]
但是,这需要很长时间。你能告诉我如何通过Python中的数据并行化来并行计算吗?
答案 0 :(得分:2)
如果您有多个核心并处理每个二维列表是一项昂贵的操作,您可以使用Pool
中的multiprocessing
。这是一个在不同过程中对数字进行平方的简短示例:
import multiprocessing as mp
A = [[[1,2,3],[4,5,6],[7,8,9]],[[2,4,1],[1,4,6],[1,2,4]]]
def square(l):
return [[x * x for x in sub] for sub in l]
pool = mp.Pool(processes=mp.cpu_count())
res = pool.map(square, A)
print res
输出:
[[[1, 4, 9], [16, 25, 36], [49, 64, 81]], [[4, 16, 1], [1, 16, 36], [1, 4, 16]]]
在将iterable拆分为工作进程时, Pool.map
的行为类似于内置map
。它还有第三个参数chunksize
,用于定义向工作人员提交大块的大小。