Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数返回值的循环的多处理_Python_Multithreading_Function_Multiprocessing - Fatal编程技术网

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)
我想做的是:

  • 找到一种方法让var1,var2,var3回到另一个变量中
  • 编写完成所有并行化过程的函数
  • 由于每项任务本身都很快,需要一组工人来完成
  • 以下是我目前写的内容:

    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!