thread multiprocessing.dummy en Python n'utilise pas 100% de processeur



python thread pool (1)

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

multiprocessing.dummy réplique l'API du multiprocessing mais n'est rien d'autre qu'une enveloppe autour du module de threading .

Cela signifie que vous êtes limité par le Global Interpreter Lock (GIL) , et qu'un seul thread peut réellement exécuter des opérations liées au CPU à 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 vous attaquer au problème que vous rencontrez avec le multiprocessing.Pool .

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

Je fais un projet d'apprentissage automatique en Python, je dois donc prédire la fonction 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 que sur 20-40% (en somme, c'est 100%). J'utilise multiprocessing.dummy car j'ai des problèmes avec le module de multitraitement dans la fonction pickling.





multiprocessing