how do I parallelize a simple python def with multiple argument
本问题已经有最佳答案,请猛点这里访问。
我想并行化一个Python脚本。我已经创建了一个定义:
1 2 | def dummy(list1,list2): do usefull calculations ... |
列表1和列表2包含一个文件名列表,我应该读取这些文件名,然后用它们进行计算。这些文件是独立的。列表1和2包含相同数量的参数。
假设我有两个CPU(我想强制使用CPU的数量)。我希望第一个CPU使用仅包含列表1和列表2前半部分的列表调用定义,同时第二个CPU应使用列表1和列表2后半部分调用相同的def dummy。
比如:
1 2 3 4 5 6 7 | 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个参数并且我不能循环CPU的情况下工作。
谢谢你对那个问题的帮助!
附:我不可能把两个参数连接成一个,因为在实际情况下,我要传递更多的参数。
首先,你不需要自己去划分你的列表,
要将许多参数作为单个参数传递给函数,只需将列表压缩在一起,如下所示:
1 2 3 4 5 6 7 8 9 | import multiprocessing def myFunction(arguments): item1, item2 = arguments ... nb_cpus = 2 pool = multiprocessing.Pool(processes=nb_cpus) results = pool.map(myFunction, zip(list1, list2)) |