[英]Python multiprocessing to always utilize x number of cores
我有以下代码使用 python 的多处理库使用 8 个内核进行一些繁重的计算。
import random
from multiprocessing import Process
random_numbers_list = [random.random()] * 10000000
for i in range(0, len(random_numbers_list), 8):
threads = []
for j in range(i, i + 8):
if j > len(random_numbers_list) - 1:
break
p = Process(target=do_heavy_computation,
args=(random_numbers_list[j], j))
threads.append(p)
[t.start() for t in threads]
[t.join() for t in threads]
然而,问题是,虽然所有 8 核都被正确地用于并行计算,但它会等待当前 8 核批处理完成,直到下一个 8 核批处理开始。 我希望代码始终使用 8 个内核,这样当任何一个内核完成时,它会使用总共 8 个内核中的下一个可用内核。 任何指导将不胜感激!
让进程池为您处理一切。
from multiprocessing import Pool
with Pool(processes=8) as pool:
for index, value in enumerate(random_numbers_list):
pool.apply(do_heavy_computation, args=(value, index))
Pool()
初始化程序有额外的 arguments 可以调查。 但是上面的代码是你在 8 个进程上运行代码所需的全部,并等待它完成。
您可能需要更改的最重要的参数是maxtasksperchild
,其默认值为None
。 将创建八个线程,您的所有任务都将在这八个线程上运行。 您可以将其更改为masktasksperchild=1
,每个线程将只运行 1 个任务,然后死亡并被新线程替换。 这就是您在上面所做的,但尚不清楚这是否有必要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.