web-dev-qa-db-fra.com

Python Interprète utilisant uniquement 12% de la puissance du processeur

J'utilise python sur Ubuntu pour l'analyse de texte. En dépit de la quantité de travail nécessaire au programme, l'utilisation du processeur indiquée dans le moniteur système reste constante à 12%.

J'ai changé la priorité du programme de Normal à Very High mais cela n'a eu aucun effet.

Qu'est-ce qui limite la quantité d'utilisation du processeur que mon python peut obtenir et comment puis-je changer cela, afin que le programme puisse utiliser davantage de puissance de processeur?

26
Matthias Herrmann

Je suppose que vous avez un processeur avec 8 cœurs virtuels (quad-core avec hyper-threading probablement)? Cela signifie qu'un thread/noyau virtuel entièrement chargé équivaut à 12,5% de la charge totale.

L'interpréteur Python est une application qui ne s'exécute que par défaut en tant que processus unique et ne peut donc pas tirer parti de plus d'un cœur virtuel. Même si le code que vous utilisez avec lui utilise le multithreading, il n'utilisera toujours qu'un seul thread/noyau virtuel, en raison de GIL (verrou d'interprète global) .

Si votre programme Python utilise multitraitement , qui démarre en fait plusieurs instances de l’interprète Python et les laisse effectuer vos tâches de manière réellement parallèle, vous pouvez avantage de plusieurs cœurs virtuels/threads de processeur. (Comme l'a souligné @SargeBorsch dans son commentaire, il existe aussi des moyens avancés pour y parvenir sans traitement multiple, mais ce n'est généralement pas quelque chose que vous écrivez vous-même rapidement.)

73
Byte Commander

Une autre possibilité, moins probable dans ce cas, est que le programme soit lié au disque, c’est-à-dire qu’il lit et écrit sur/à partir du disque, ce qui est lent et que la CPU attend le disque.

18
jmmcd