2

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

在此处输入图像描述

4

2 回答 2

3

我认为最好的解决方案是使用multiprocessing.Pool. 它可以很容易地设置一个进程池(根据您指定的数量),然后为它们提供并行执行的作业。这是一些基本的示例代码:

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

这段代码会比必要的慢一点,因为它将函数调用的结果传递回父进程(即使返回值是 all None),但我怀疑如果你的处理任务需要任何显着的开销,开销会相对较小多少时间。

于 2013-05-21T04:11:18.980 回答
0

1000 个文件,每个 15 分钟,在一台机器上将超过 10 天。我会使用Dispy之类的东西分发作品。那将免费为您提供监控等。

于 2017-02-22T11:29:39.567 回答