繁体   English   中英

Python 多处理始终使用 x 核数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM