我想并行化一个python脚本。我创建了一个定义:
def dummy(list1,list2):
do usefull calculations ...
list1和list2包含我应该阅读的文件名列表,然后用它们进行计算。这些文件是独立的。 list1和2包含相同数量的参数。
让我们假设我有2个cpus(我想要强制使用cpus的数量)。我想第一个cpu调用定义,列表只包含list1和list2的前半部分,同时第二个cpu应该调用与list1和list2的后半部分相同的def虚拟。
类似的东西:
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)
问题是pool.map只能在def有1个参数且我无法循环cpus时才能工作。
感谢您对该问题的任何帮助!
PS:我不可能将这两个参数连接成一个,因为在实际情况下,我正在传递更多的参数。
答案 0 :(得分:4)
首先,您不需要自己拆分列表,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))