我正在处理文件夹层次结构中的一些文件,这些文件位于Years> Months> Days(其中days是我正在操作的实际文件的日期)。
现在我在日级别并行化,所以一次做八个文件,但我想知道是否有可能在几个月甚至几年内做一些外部并行化?我可以这样做:
pool = Pool()
pool.starmap(convertYears, years)
然后在convertYears函数中,
pool = Pool()
pool.starmap(convertMonths, months)
然后在convertMonths函数中,
pool = Pool()
pool.starmap(convertDays, files)
我不太了解并行化的工作原理,所以这就是我在这里问的原因。
答案 0 :(得分:1)
是的,这是可能的,但默认情况下Pool
使用最大可用处理器数,这意味着可以一次完成的最大任务数。这意味着,如果您有8个可用处理器convertYears
将同时打开8个,那么当它们启动convertMonths
时,每个处理器将打开8(现在总共为64个),并且每个处理器将打开8 (现在总共有512个进程)并且所有这些都将带来创建新进程所需的时间和内存开销,而所有这些都将只运行8个进程。即使您使用Pool(2)
来限制每个级别,您仍然会同时拥有8个进程,这正是您开始的地方。
长话短说,程序将同样快,如果你只是坚持在一个级别进行并行化,你的CPU就不会讨厌你。