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

J’utilise python sur Ubuntu pour l’parsing 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 rest 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 programme python peut obtenir et comment puis-je changer cela, afin que le programme puisse utiliser davantage de puissance de processeur?

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

L’interpréteur Python est une application qui, par défaut, ne s’exécute que comme un seul processus et ne peut donc pas tirer parti de plusieurs kernelx virtuels. Même si le code que vous exécutez utilise le multithreading, il n’utilisera toujours qu’un seul thread / kernel virtuel du processeur, en raison du locking d’interpréteur global (GIL) .

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

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 le disque, ce qui est lent et que la CPU attend le disque.