Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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/7/symfony/6.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中具有大量进程但CPU数量有限的多处理_Python_Multiprocessing_Multiprocess - Fatal编程技术网

Python中具有大量进程但CPU数量有限的多处理

Python中具有大量进程但CPU数量有限的多处理,python,multiprocessing,multiprocess,Python,Multiprocessing,Multiprocess,我有大量的数据文件需要通过函数a进行处理。比如说1000个文件,每个文件的每个处理过程不到15分钟,内存为6GB。我的电脑有32GB和8个CPU,因此为了安全起见,我一次最多可以使用4个进程(24GB内存和4个CPU)。所以我的问题是,我是否可以使用python中的多进程包创建4个进程,每个进程连续获得一个函数来独立处理一个数据文件,如下图所示。显然,每个cpu必须处理大约250个文件,但1000个文件的文件大小不同,因此不一定正确。需要注意的是,一旦一个流程完成,那么无论其他流程是否完成,它都

我有大量的数据文件需要通过函数a进行处理。比如说1000个文件,每个文件的每个处理过程不到15分钟,内存为6GB。我的电脑有32GB和8个CPU,因此为了安全起见,我一次最多可以使用4个进程(24GB内存和4个CPU)。所以我的问题是,我是否可以使用python中的多进程包创建4个进程,每个进程连续获得一个函数来独立处理一个数据文件,如下图所示。显然,每个cpu必须处理大约250个文件,但1000个文件的文件大小不同,因此不一定正确。需要注意的是,一旦一个流程完成,那么无论其他流程是否完成,它都会立即分配一个新的作业,也就是说,对于同时完成的所有四个流程,没有等待时间。函数A的返回在这里并不重要。请提供代码!谢谢你的建议


我认为最好的解决办法是使用。它使建立一个进程池(根据您指定的数量)变得非常容易,然后为它们提供并行执行的作业。下面是一些基本的示例代码:

import multiprocessing as mp

def handle_file(filename):
    # do your processing here

def process_files(list_of_files):
    pool = mp.Pool(4) # argument is number of processes, default is the number of CPUs
    pool.map(list_of_files) # this returns a list of results, but you can ignore it

此代码将比需要的稍慢一些,因为它将函数调用的结果传递回父进程(即使返回值都是
None
),但我怀疑,如果处理任务花费大量时间,开销会相对较小。

1000个文件在一台机器上15分钟的时间将超过10天。我会用类似的东西来分配工作。这将给你免费监控等