限制多处理中使用的处理器数



对于我的代码,我需要在 Python 中使用multiprocessing模块来实现代码中的并行性。我为此编写了以下代码:

for j in range(0, len(filters)):
        p = multiprocessing.Process(target=task, args=(filters[j],j+1,img,i+1,fname))
        p.start()
        processes.append(p)
for j in range(0, len(filters)):
        p.join()

上面的代码工作正常,但它使用系统中的所有可用处理器。

例如:如果我有 16 个处理器,它使用系统中的所有 16 个处理器。

有什么方法可以控制/限制多处理模块使用的处理器数量吗?

你应该使用多处理。游泳池 - 它给你一个一定大小的游泳池。

processes = []
with Pool(processes=4) as pool:
    for j in range(0, len(filters)):
        p = pool.apply_async(target=task, args=(filters[j],j+1,img,i+1,fname))
        processes.add(p)
    for result in processes:
        print('t', result.get())

完整的文档在这里。

这还有一个额外的好处,即您不会为每个任务启动一个新流程,而是重用相同的流程。鉴于启动进程的成本很高,您将获得更好的性能。

要猜测的进程数量并非微不足道 - 这取决于您的工作是否受 CPU 限制、I/O 限制以及您的 PC 上其他程序的负载。如果您受 CPU 限制,则可以像这样获取内核数:

multiprocessing.cpu_count()

您可能应该选择一个小于该值的值,例如 -2 为其他工作留出空间,但这只是一个猜测。

相关内容

  • 没有找到相关文章

最新更新