我有一个多处理代码,每个进程都必须以不同的方式分析相同的数据。输入数据总是相同的,它是不可变的。输入数据是一个20列60k行的数据帧。
如何有效地将这些数据"放入"每个流程?
在单进程应用程序中,我使用了全局变量,但在多进程中,它不起作用。
当我试图将其作为函数参数传输时,我只有表的第一个元素
欢迎使用堆栈溢出。你需要花时间,给出可重复的最低限度的工作例子,以获得具体的答案,并帮助整个社会。
无论如何,如果需要在每次迭代/过程等中更改全局变量,就不应该使用它们。
多处理器的工作原理是这样的,用粗略易懂的术语来说:
import concurrent.futures
import glob
def manipulate_data_function(data):
result = torture_data(data)
return result
# ProcessPoolExecutor for CPU bound stuff
with concurrent.futures.ThreadPoolExecutor(max_workers = None) as executor:
futures = []
for file in glob.glob('*txt'):
futures.append(executor.submit(manipulate_data_function, data))
感谢您的回答,我不会在每次迭代中更改此日期。我使用相同的数据来处理每个进程,数据如何更改给定的抛出函数参数
with concurrent.futures.ProcessPoolExecutor() as executor:
res = executor.map(goal_fcn, p)
for f in concurrent.futures.as_completed(res):
fp = res
和下一个
def goal_fcn(x):
return heavy_calculation(x, global_DataFrame, global_String)
编辑:适用于:
with concurrent.futures.ProcessPoolExecutor() as executor:
res = executor.map(goal_fcn, p, [global_DataFrame], [global_String])
for f in concurrent.futures.as_completed(res):
fp = res
def goal_fcn(x, DataFrame, String):
return heavy_calculation(x, DataFrame, String)