gpt4 book ai didi

python-2.7 - 我应该并行运行多少个进程?

转载 作者:行者123 更新时间:2023-12-04 02:43:36 25 4
gpt4 key购买 nike

我有一个并行任务,它从多个文件中读取内容,并将信息写入多个文件。

我目前用来并行化东西的成语:

listOfProcesses = []
for fileToBeRead in listOfFilesToBeRead:
process = multiprocessing.Process(target = somethingThatReadsFromAFileAndWritesSomeStuffOut, args = (fileToBeRead))
process.start()
listOfProcesses.append(process)

for process in listOfProcesses:
process.join()

值得注意的是 somethingThatReadsFromAFileAndWritesSomeStuffOut本身可能并行化任务(它可能必须从其他文件等读取)。

现在,如您所见,创建的进程数不取决于我计算机上的内核数或其他任何东西,除了需要完成多少任务。如果需要运行十个任务,则创建十个进程,以此类推。

这是创建任务的最佳方式吗?我是否应该考虑我的处理器有多少个内核等?

最佳答案

始终将进程数与任务数分开。没有理由为什么两者应该相同,并且通过将进程数设为变量,您可以进行试验以查看对您的特定问题有效的方法。没有什么理论答案能像老式的用真实数据进行的“弄脏你的手”基准测试一样好。

以下是使用多处理池的方法:

import multiprocessing as mp

num_workers = mp.cpu_count()

pool = mp.Pool(num_workers)
for task in tasks:
pool.apply_async(func, args = (task,))

pool.close()
pool.join()
pool = mp.Pool(num_workers)将创建 num_workers 的池子流程。 num_workers = mp.cpu_count()将设置 num_workers等于 CPU 核心数。您可以通过更改此数字进行试验。 (注意 pool = mp.Pool() 创建了一个 N 子进程池,其中 N 等于 mp.cpu_count()默认情况下。)

如果问题是 CPU 密集型的,那么设置 num_workers 没有任何好处。到一个大于核心数量的数字,因为机器不能有比核心数量更多的同时运行的进程。此外,如果 num_workers 在进程之间切换可能会使性能变差。超过核心数。

如果一个问题是 IO 限制的——这可能是你的问题,因为他们正在执行文件 IO——这可能是有意义的 num_workers超过核心数量,如果您的 IO 设备可以处理的并发任务多于核心数量。但是,如果您的 IO 本质上是顺序的——例如,如果只有一个硬盘驱动器只有一个读/写头——那么除了一个子进程之外的所有子进程都可能被阻塞等待 IO 设备。在这种情况下,不可能有并发,并且在这种情况下使用多处理可能比等效的顺序代码慢。

关于python-2.7 - 我应该并行运行多少个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com