Python concurrent.futures全局变量



我有一个多处理代码,每个进程都必须以不同的方式分析相同的数据。输入数据总是相同的,它是不可变的。输入数据是一个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)

相关内容

  • 没有找到相关文章

最新更新