1

J'ai une boucle que j'ai essayé d'accélérer. J'ai remarqué que Python n'utilisait qu'un seul cœur, j'ai donc importé le paquet multi-traitement et mis en place un pool. Maintenant, tout le processus est réparti sur un certain nombre de noyaux, mais ils semblent être limités à ~ 10%.Multiprocesseur Python limitant à 10% par cœur?

Est-ce prévu/optimal? Ou est-il un moyen d'utiliser un plus de chaque noyau?

htop screenshot

code:

from multiprocessing.dummy import Pool as ThreadPool 

//...more code here... 

pool = ThreadPool(os.cpu_count()) 
pool.starmap(getSubject, zip(range(1, Nsub))) 
pool.close() 
pool.join() 

ps. Avant d'utiliser Pool htop montrerait un noyau à 100% et les autres à ~ 0%.

Répondre

0

multiprocessing.dummy.Pool est un thread pool. En raison de GIL, vous n'utiliserez pas plusieurs cœurs au maximum. Changez-le en multiprocessing.Pool si vous souhaitez utiliser des processus à la place.

Notez que l'utilisation totale des cœurs dépend également de ce que fait exactement getSubject. Si vous effectuez une synchronisation (par exemple, le verrouillage), vous risquez également de voir une perte de performance.