spo*_*nce 2 python parallel-processing multiprocessing
我想并行化一个 python 脚本。我已经创建了一个定义:
def dummy(list1,list2):
do usefull calculations ...
Run Code Online (Sandbox Code Playgroud)
list1 和 list2 包含我应该阅读的文件名列表,然后用它们进行计算。文件是独立的。list1 和 2 包含相同数量的参数。
让我们假设我有 2 个 cpus(我想强加要使用的 cpus 数量)。我希望第一个 cpu 使用仅包含 list1 和 list2 的前半部分的列表调用定义,同时第二个 cpu 应该使用 list1 和 list2 的后半部分调用相同的 def dummy。
就像是:
import multiprocessing
nb_cpus = 2
pool = multiprocessing.Pool(processes=nb_cpus)
for ii in nb_cpus:
list_half1 = list1[0:max/nb_cpus]
list_half2 = list2[0:max/nb_cpus]
result[ii] = pool.map(dummy,list_half1,list_half2)
Run Code Online (Sandbox Code Playgroud)
问题是 pool.map 只能在 def 有 1 个参数并且我不能循环 CPU 时才能工作。
感谢您对这个问题的任何帮助!
PS:我不可能将两个参数连接成一个,因为在实际情况下,我要传递更多的参数。
首先,你不需要自己拆分你的列表,multiprocessing.Pool会为你做。
要将许多参数作为单个参数传递给您的函数,您只需要将列表压缩在一起,如下所示:
import multiprocessing
def myFunction(arguments):
item1, item2 = arguments
...
nb_cpus = 2
pool = multiprocessing.Pool(processes=nb_cpus)
results = pool.map(myFunction, zip(list1, list2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4965 次 |
| 最近记录: |