[英]Restrict the number of processors used in 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模块使用的处理器数量?
您应该使用multiprocessing.Pool-它为您提供一定大小的池。
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以便为其他工作留出空间,但这只是一个猜测。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.