J'utilise Python pour exécuter certains algorithmes et quel que soit le Python que j'utilise, et j'ai essayé de nombreuses versions, l'utilisation du processeur va jusqu'à 25% max. Pourquoi Python ne tire-t-il pas parti du reste de mes ressources CPU? J'ai changé la priorité du service de normal à élevé et plus tard en temps réel, avec des redémarrages entre les deux, mais rien n'a changé.
Existe-t-il un moyen de faire en sorte que Python utilise 50% ou plus de mon processeur?
Réponses:
Tout simplement, vous exécutez une application à thread unique dans un système avec 4 cœurs logiques - en tant que tel, vous avez un processus, utilisant tout le cœur.
Vous devrez (et ce n'est pas trivial) devoir réécrire l'algorithme pour qu'il soit multithread, ou voir si vous pouvez simplement exécuter 2 instances ou plus, sur des cœurs spécifiques pour utiliser davantage votre CPU. Il n'y a pas d'autre chemin.
la source
Le langage Python est antérieur aux processeurs multicœurs, il n'est donc pas étrange qu'il ne les utilise pas nativement.
De plus, tous les programmes ne peuvent pas bénéficier de plusieurs cœurs. Un calcul effectué par étapes, où l'étape suivante dépend des résultats de l'étape précédente, ne sera pas plus rapide en utilisant plus de cœurs. Les problèmes qui peuvent être vectorisés (en appliquant le même calcul à de grands tableaux de données) peuvent être relativement faciles à utiliser pour utiliser plusieurs cœurs car les calculs individuels sont indépendants.
Lorsque vous faites beaucoup de calculs, je suppose que vous utilisez numpy ? Sinon, vérifiez-le. C'est une extension écrite en C qui peut utiliser des bibliothèques d'algèbre linéaire optimisées comme ATLAS. Il peut accélérer considérablement les calculs numériques par rapport au Python standard.
Cela dit, il existe plusieurs façons d'utiliser plusieurs cœurs avec python.
multiprocessing
module est intégré. Lamultiprocessing.Pool
classe fournit une vectorisation sur plusieurs processeurs avec lesmap()
méthodes associées. Il y a cependant un compromis ici. Si vous devez communiquer de grandes quantités de données entre les processus, cette surcharge peut annuler l'avantage de plusieurs cœurs.Notez que le
threading
module n'est pas du tout utile à cet égard. Pour simplifier la gestion de la mémoire, le verrou d'interpréteur global ("GIL") impose qu'un seul thread à la fois puisse exécuter le bytecode python. Les modules externes comme numpy peuvent cependant utiliser plusieurs threads en interne.la source