Python n'utilisant qu'un seul noyau à la fois pour fonctionner?

13

J'ai remarqué récemment que python n'utilise qu'un seul cœur à la fois pour fonctionner. Existe-t-il un moyen, peut-être des versions ou des commandes spéciales, de lui faire utiliser toutes les ressources (deuxième cœur)?

mahmoud hageer
la source
1
Si vous exécutez un processus par lots pour des tâches répétées et que le script fait la bonne chose et utilise 100% d'un cœur pour faire quelque chose d'utile, cela peut ne pas être si dangereux. Démarrez un deuxième processus qui exécute l'autre cœur également à 100%. L'effet brut peut être meilleur qu'avec un processus fileté. La situation est différente si vous n'avez qu'une seule tâche lourde à traiter.
user30184
Ceci est déjà discuté voir ce fil pour plus d'informations et de solutions gis.stackexchange.com/questions/55048/…
iRfAn
Pourriez-vous modifier votre question pour clarifier s'il s'agit de Python en général ou plus spécifiquement d'ArcPy (comme le mentionnent vos balises), s'il vous plaît? Si c'est le dernier, pouvez-vous inclure quelques détails pour démontrer que c'est le cas, comment l'avez-vous remarqué?
PolyGeo

Réponses:

15

Vous pouvez utiliser des sous-processus pour tirer parti de plusieurs cœurs dans un script Python, afin que plusieurs tâches puissent s'exécuter en parallèle. Mais vous ne pouvez pas diviser une seule tâche sur plusieurs cœurs. Voir une explication détaillée dans cette FAQ: ArcGIS 10 prend-il en charge les processeurs multicœurs et / ou les systèmes d'exploitation 64 bits?

Si vous êtes un utilisateur chevronné de Python, vous pourriez être intéressé par l'approche expliquée dans cette présentation utilisateur du Dev Summit 2014, appelée Parallel Geoprocessing Using Python Multiprocessing and Critical Path Methodology , mais elle ne vous permettra pas d'utiliser plusieurs cœurs pour la même tâche.

Sinon, vous devrez attendre la sortie d'ArcGIS Pro (application entièrement 64 bits) plus tard cette année pour tester les performances du multithread ... (ou essayer la version bêta maintenant)

GISGe
la source
4

Comme certains l'ont mentionné, le multitraitement n'est pas pris en charge dans ArcGIS Desktop. Lorsque je parle de traitement de jeux de données SIG dans un environnement de bureau, j'essaie de savoir si je peux diviser un gros flux de travail en petits morceaux qui seront calculés en même temps en chargeant plusieurs cœurs. Presque tous les cas doivent être étudiés individuellement car les comportements des outils GP peuvent différer considérablement.

Réfléchissez à ce qui est plus rapide à faire pour résoudre un problème mathématique simple. Quel est le moyen le plus rapide de compter tous les nombres de 1 à 100?

1) en additionnant les résultats un par un et en ajoutant les uns aux autres de manière incrémentale (1 + 2 = 3, 3 + 3 = 6,6 + 4 = 10 et ainsi de suite). Un noyau travaille sur cette tâche.

2) divisez les valeurs au préalable en morceaux individuels et additionnez-les d'abord (1 à 30, 31 à 60 et 60 à 100). Trois cœurs fonctionneront en même temps (la dernière étape serait de additionner trois valeurs reçues).

Étant donné que différents outils GP sont des implémentations de différents algorithmes avec une notation big-O différente , vous devrez probablement les aborder différemment en termes de soumission de processus multiples.

Un bon point de départ serait d'apprendre comment fonctionne la bibliothèque multitraitement en Python. J'utilise assez lourdement.

J'ai également remarqué que l'exécution de scripts Python à partir d'une ligne de commande en utilisant le Python 64 bits entraîne généralement une exécution plus rapide (par rapport à l'exécution de l'EDI, mais cela pourrait ne pas être le cas sur votre machine). Le géotraitement en arrière-plan a été introduit dans 10.1, mais essayez d'exécuter les scripts Python avec Python 64 bits et voyez comment les performances sont affectées.

ArcGIS Pro nommé dans une autre réponse est disponible en version bêta 5 pour le téléchargement (gardez à l'esprit que vous devez être membre de la communauté Esri Beta pour soumettre des bogues et avoir accès à un compte ArcGIS Online pour les organisations afin de pouvoir exécuter le Pro).

Alex Tereshenkov
la source
1

Pypy est une version conforme de python qui s'exécute 4 à 5 fois plus rapidement que CPython (le python "standard").

Si vous êtes assez courageux pour le construire à partir de la source, il existe une branche qui "peut exécuter plusieurs threads indépendants gourmands en CPU dans le même processus en parallèle". Cela signifie que vous bénéficiez des avantages du multithread sans avoir à réécrire de code.

sbell
la source
0

La réponse simple est non. Une meilleure réponse est que cela dépend.

En raison de l'implémentation de CPython (le python le plus couramment utilisé), il est sûr de supposer que votre Python ne peut pas réellement tirer parti du multithreading. Voir:

http://en.wikipedia.org/wiki/Global_Interpreter_Lock

https://wiki.python.org/moin/GlobalInterpreterLock

Notez que IO est immunisé contre le GIL.

Vous pouvez maintenant y travailler. Comme d'autres l'ont souligné, vous pouvez générer des sous-processus et la bibliothèque multiprocessing peut vous aider.

épée
la source
1
Les E / S sont immunisées, mais appellent la plupart des fonctions implémentées en C, y compris la plupart des outils GP et tout dans numpy. Le GIL est moins une limitation dans les environnements SIG pratiques qu'on ne le pense.
Jason Scheirer
0

Je ne peux pas résoudre les problèmes ArcGIS, mais en ce qui concerne le traitement de plusieurs tâches à l'aide de Python, avez-vous envisagé un gestionnaire de tâches comme Celery (celeryproject.org)? Cela nécessiterait que vous identifiiez différentes tâches de traitement, les soumettiez à un "responsable" pour distribution, exécutiez des "travailleurs" qui reçoivent des tâches du responsable, les traitiez et rapportiez les résultats.

Ce n'est pas trivial à mettre en œuvre, mais il a une flexibilité incroyable et vous permet de tirer pleinement parti de la capacité de traitement (c'est-à-dire d'utiliser ces cœurs inactifs).

KenH
la source