在python中使用多处理来Parrize函数



我有一个名为new_function(df,y)的函数,它有两个参数dfy,我正试图通过使用multiprocessing将它应用于100个数据帧的列表,我想将结果附加到列表中。我浏览了以前的帖子,但无法理解,我尝试了这种方法,但无法处理。

import multiprocessing as mp
pool = mp.Pool(processes = mp.cpu_count())
results = [pool.map(new_function, df) for df in data]
pool.close() 
pool.join()

在您的示例中,您有

results = [pool.map(new_function, df) for df in data]

这不会像您预期的那样工作,因为pool.map的第二个参数应该是您要为其执行new_function的元素的可迭代参数。

您应该能够使用以下方法并行运行new_function。此代码使用functools.partial生成"偏函数",即使用CONSTANT填充常数y参数。CCD_ 11将针对包含在CCD_ 13中的每个CCD_。

import functools
import multiprocessing as mp
if __name__ == "__main__":
with mp.Pool(processes = mp.cpu_count()) as pool:
results = pool.map(functools.partial(new_function, y=CONSTANT), data)
print(results)

由于我没有您的输入数据,您可以使用伪输入和简单的new_function:来了解这是如何工作的

def new_function(x, y):                                                         
return x, y                                                                 
if __name__ == "__main__":                                                      
data = [1, 2, 3, 4]                                                         
CONSTANT = 12                                                               
with mp.Pool(processes = mp.cpu_count()) as pool:                           
results = pool.map(functools.partial(new_function, y=CONSTANT), data)   
print(results)

输出:

[(1, 12), (2, 12), (3, 12), (4, 12)]

如果y参数随data而变化,即您有一个对应于data中不同DataFrame的值列表,则可以使用pool.starmap

def new_function(x, y):                                                         
return x, y
if __name__ == "__main__":
# Sample data                                                    
data = [1, 2, 3, 4]                                                         
y_list = [5, 6, 7, 8]                                                       
with mp.Pool(processes = mp.cpu_count()) as pool:                           
results = pool.starmap(new_function, zip(data, y_list))                 
print(results)

输出:

[(1, 5), (2, 6), (3, 7), (4, 8)]

相关内容

  • 没有找到相关文章

最新更新