我需要通过函数A处理大量数据文件。假设1000个文件,每个文件的每个进程在6GB内存下花费不到15分钟。我的电脑有32GB和8 cpus,所以我最多可以使用4个进程(24GB内存和4个cpus)来保证安全。所以我的问题是我可以在python中使用multiprocess包来创建4个进程,并且每个进程连续获得函数A来独立处理数据文件,如下图所示。显然每个cpu必须处理大约。 250个文件,但1000个文件的文件大小不同,那么它不一定是真的。需要注意的是,一旦一个过程完成,它就会立即分配一个新的工作,无论其他过程是什么完成,即同时完成所有四个过程没有等待时间。功能A的返回在这里并不重要。请提供密码!谢谢你的任何建议。
答案 0 :(得分: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
这段代码会比必要的慢一点,因为它将函数调用的结果传递回父进程(即使返回值都是None
),但我怀疑开销是相对的如果您的处理任务需要很长时间,那就很小。
答案 1 :(得分:0)
1000个文件在一台机器上每个15分钟将超过10天。我使用Dispy之类的东西来分发作品。这样可以免费监控等。