我正在尝试将 python 循环有效地并行化为 n 个线程。我对最好的方法是什么感到有点困惑。其他问题是每个线程都需要写入字典(虽然永远不会在同一个位置),并且每个线程都必须执行循环的 24/n 次迭代(尽管我很确定大多数 pyhon 库会处理这个问题对我来说)。
代码(简化):
n=<number of threads input by user>
mySets=[ str(x) for x in range(1,25) ]
myDict={}
// Start of parallelization
for set in mySets:
//Performs actions on the set
//Calls external c++ code on the set and gets a result back
//processes the result
myDict[set]=result
// End parallelization
// Process the results to output
我在 unix 环境中,但最好在 Windows 或 MAC 上不会有问题。我的其余代码是可移植的,我真的不希望它停止。
我看到这个线程:Parallelize a loop in python 2.4 但我不认为 fork 是我想要的,因为我希望用户指定可用的节点数。
我还查看了多处理库,我很确定这是我想要的,但似乎每个人都将他们的代码放入一个函数中——我想避免这种情况……它有很多代码而且它会很乱。
我也看到了joblib,但是我不清楚它和multiprocessing库有什么区别。以及一个与另一个相比的好处是什么。
感谢您的帮助!
最佳答案
您可以使用 mutliprocessing.pool.Pool
.
这是一些伪代码:
from multiprocessing.pool import Pool
def do_something(n, sets):
out = dict()
with Pool(processes=n) as pool:
results = pool.map(cpp_computation_function, sets)
for set, result in zip(sets, results):
out[set] = result
return out
关于python - 尝试跨 n 个节点并行化 python 循环写入字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45243190/