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

时间:2019-06-06 06:23:15

标签: python multiprocessing python-multiprocessing

对于我的代码,我需要在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个处理器。

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

1 个答案:

答案 0 :(得分:1)

您应该使用multiprocessing.Pool-它会为您提供一定大小的池。

app_name

完整文档为here

这还有一个好处,就是您不必为每个任务启动新的流程,而是重复使用相同的流程。鉴于开始一个过程很昂贵,您将获得更好的性能。

要猜测的进程数量并非易事-这取决于您的工作是否受CPU限制,I / O限制以及其他程序对PC的负担。 如果您受CPU限制,则可以这样获得内核数:

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())

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