Python 函数返回值的循环的多处理
我正在对大量文件执行一些重复任务,因此我希望并行运行这些任务 每个任务都位于一个函数中,该函数类似于:Python 函数返回值的循环的多处理,python,multithreading,function,multiprocessing,Python,Multithreading,Function,Multiprocessing,我正在对大量文件执行一些重复任务,因此我希望并行运行这些任务 每个任务都位于一个函数中,该函数类似于: def function(file): ... return var1, var2, ... 我通过以下方式并行运行了所有这些: import concurrent.futures as Cfut executor = Cfut.ProcessPoolExecutor(Nworkers) futures = [executor.submit(function, fi
def function(file):
...
return var1, var2, ...
我通过以下方式并行运行了所有这些:
import concurrent.futures as Cfut
executor = Cfut.ProcessPoolExecutor(Nworkers)
futures = [executor.submit(function, file) for file in list_files]
Cfut.wait(futures)
我想做的是:
def function(files):
for file in files:
...
print('var1', 'var2', ...)
def multiprocess_loop_grouped(function, param_list, group_size, Nworkers):
# function : function that is running in parallel
# param_list : list of items
# group_size : size of the groups
# Nworkers : number of group/items running in the same time
executor = Cfut.ProcessPoolExecutor(Nworkers)
futures = [executor.submit(function, param)
for param in grouper(param_list, group_size)]
Cfut.wait(futures)
如果我只打印var1、var2等,它可以工作,但我需要将这些结果放入数组或其他东西。使用Andrej Kesely的注释和lib multiprocessing,我成功地编写了一些使用共享字典工作的东西
def function(files, dic):
for file in files:
...
dic[i] = var1, var2, ...
def multiprocess_loop_grouped(function, param_list, group_size, Nworkers):
# function : function that is running in parallel
# param_list : list of items
# group_size : size of the groups
# Nworkers : number of group/items running in the same time
manager = mlp.Manager()
dic = manager.dict()
executor = Cfut.ProcessPoolExecutor(Nworkers)
futures = [executor.submit(function, param, dic)
for param in grouper(param_list, group_size)]
Cfut.wait(futures)
return [dic[i] for i in range(len(dic))]
看看如何在进程之间共享状态:我也发现了这个主题。为了使用这个共享内存,我应该从concurrent.futures移动到multiprocessing lib吗?或者有什么方法可以通过concurrent.futures实现它?您可以通过concurrent.futures使用
多处理
。这不应该是一个问题。老实说,像gevent这样的异步处理结构将使这更容易,并且可能提供相同的性能。我需要一个链接或一个简单的示例来了解如何从这个“工作池”实现到gevent!