multitraitement.mannequin en Python n'est pas en utilisant 100% de cpu
Je suis en train de faire une machine d'apprentissage projet en Python, je dois donc faire en parallèle de prédire la fonction, 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 chargés seulement sur 20 à 40% (en somme c'est du 100%). J'utilise le multitraitement.mannequin parce que j'ai quelques problèmes avec le module multiprocessing dans le décapage de la fonction.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez
multiprocessing.mannequin
, vous êtes à l'aide de fils, pas de processus:Cela signifie que vous êtes limité par le Mondial Interprète de Verrouillage (GIL), et un seul thread peut effectivement exécuter CPU-les opérations liées à la fois. Qui va vous empêcher de tirer pleinement parti de votre processeur. Si vous souhaitez obtenir la pleine parallélisme dans tous les cœurs disponibles, vous allez avoir besoin de l'adresse de décapage de l'émission vous êtes en frappant avec
multiprocessing.Pool
.Noter que
multiprocessing.dummy
peut toujours être utile si le travail vous avez besoin pour paralléliser IO est lié, ou utilise une C-extension qui libère le GIL. Pour un pur le code Python, cependant, vous aurez besoinmultiprocessing
.lxml
,regex
,numpy
peut et ne relâchez GIL et donc plusieurs threads peuvent s'exécuter en parallèle.