loop - python thread pool



multiprocessing.dummy en Python n'utilise pas 100% de CPU (1)

Je suis en train de faire un projet d’apprentissage automatique en Python, je dois donc faire une fonction de prédiction parallèle, que j’utilise dans mon programme.

from multiprocessing.dummy import Pool
from multiprocessing import cpu_count


def multi_predict(X, predict, *args, **kwargs):
    pool = Pool(cpu_count())
    results = pool.map(predict, X)
    pool.close()
    pool.join()
    return results

Le problème est que tous mes processeurs ne sont chargés qu’à 20-40% (en tout, c’est 100%). J'utilise multiprocessing.dummy car j'ai quelques problèmes avec le module de multitraitement dans la fonction de pickling.


Lorsque vous utilisez multiprocessing.dummy , vous utilisez des threads, pas des processus:

multiprocessing.dummy réplique l'API de multiprocessing mais n'est qu'un encapsuleur autour du module de threading .

Cela signifie que vous êtes limité par le verrou d'interprète global (GIL) et qu'un seul thread peut réellement exécuter des opérations liées au processeur à la fois. Cela vous empêchera d'utiliser pleinement vos processeurs. Si vous voulez obtenir un parallélisme complet sur tous les cœurs disponibles, vous devrez résoudre le problème de décapage que vous rencontrez avec le multiprocessing.Pool .

Notez que multiprocessing.dummy peut toujours être utile si le travail que vous devez paralléliser est lié à l'IO ou utilise une extension C qui libère la GIL. Pour le code pur Python, cependant, vous aurez besoin du multiprocessing .





multiprocessing