我有一个名为new_function(df,y)
的函数,它有两个参数df
和y
,我正试图通过使用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)]