双重或更多多处理?
Double or More Multiprocessing?
我正在处理年>月>日文件夹层次结构中的一些文件(其中天是我正在操作的实际文件)。
现在我在日级并行化,所以一次处理八个文件,但我想知道是否有可能在数月甚至数年内进行一些外部并行化?我可以做类似的事情吗:
pool = Pool()
pool.starmap(convertYears, years)
然后在 convertYears 函数中,
pool = Pool()
pool.starmap(convertMonths, months)
然后在 convertMonths 函数中,
pool = Pool()
pool.starmap(convertDays, files)
我不太了解并行化是如何工作的,所以这就是我在这里问的原因。
是的,这是可能的,但是 Pool
默认情况下使用可用处理器的最大数量,这意味着一次可以完成的任务的最大数量。这意味着如果您有 8 个处理器可用 convertYears
将同时打开 8 个,那么每个处理器在启动时将打开 8 个(现在总共 64 个)convertMonths
并且每个处理器将打开 8 个(现在总共有 512 个进程)所有这些都伴随着创建新进程的时间和内存开销,而无论如何只有 8 个 运行。即使你使用 Pool(2)
来限制每个级别,你仍然会一次得到 8 个进程,这正是你开始的地方。
长话短说,程序会一样快,如果您坚持在一个级别上并行化,您的 CPU 不会讨厌您。
我正在处理年>月>日文件夹层次结构中的一些文件(其中天是我正在操作的实际文件)。
现在我在日级并行化,所以一次处理八个文件,但我想知道是否有可能在数月甚至数年内进行一些外部并行化?我可以做类似的事情吗:
pool = Pool()
pool.starmap(convertYears, years)
然后在 convertYears 函数中,
pool = Pool()
pool.starmap(convertMonths, months)
然后在 convertMonths 函数中,
pool = Pool()
pool.starmap(convertDays, files)
我不太了解并行化是如何工作的,所以这就是我在这里问的原因。
是的,这是可能的,但是 Pool
默认情况下使用可用处理器的最大数量,这意味着一次可以完成的任务的最大数量。这意味着如果您有 8 个处理器可用 convertYears
将同时打开 8 个,那么每个处理器在启动时将打开 8 个(现在总共 64 个)convertMonths
并且每个处理器将打开 8 个(现在总共有 512 个进程)所有这些都伴随着创建新进程的时间和内存开销,而无论如何只有 8 个 运行。即使你使用 Pool(2)
来限制每个级别,你仍然会一次得到 8 个进程,这正是你开始的地方。
长话短说,程序会一样快,如果您坚持在一个级别上并行化,您的 CPU 不会讨厌您。