Python immer nur mit einem Kern gleichzeitig arbeiten?


13

Ich habe kürzlich festgestellt, dass Python immer nur einen Kern zur Arbeit verwendet. Gibt es eine Möglichkeit, vielleicht spezielle Builds oder Befehle, um alle Ressourcen zu nutzen (zweiter Kern)?


1
Wenn Sie einen Stapelprozess für wiederholte Aufgaben ausführen und das Skript das Richtige tut und 100% eines Kerns für nützliche Aufgaben verwendet, ist dies möglicherweise nicht so gefährlich. Starten Sie einen zweiten Prozess, bei dem der andere Kern ebenfalls zu 100% ausgeführt wird. Der Bruttoeffekt ist möglicherweise besser als bei einem Thread-Prozess. Die Situation ist anders, wenn Sie nur eine schwere Aufgabe zu bearbeiten haben.
user30184

Dies wird bereits besprochen.
iRfAn

Können Sie Ihre Frage bearbeiten, um zu klären, ob es sich um Python im Allgemeinen oder um ArcPy im Besonderen handelt (wie in Ihren Tags angedeutet)? Wenn dies der Fall ist, können Sie einige Details angeben, um zu demonstrieren, dass dies der Fall ist, dh wie haben Sie es bemerkt?
PolyGeo

Antworten:


15

Mithilfe von Unterprozessen können Sie mehrere Kerne in einem Python-Skript nutzen, sodass mehrere Aufgaben gleichzeitig ausgeführt werden können. Sie können eine einzelne Aufgabe jedoch nicht auf mehrere Kerne aufteilen. Eine ausführliche Erläuterung finden Sie in dieser FAQ: Unterstützt ArcGIS 10 Multi-Core-Prozessoren und / oder 64-Bit-Betriebssysteme?

Wenn Sie ein erfahrener Python-Benutzer sind, interessiert Sie möglicherweise der Ansatz, der in dieser Benutzerpräsentation vom Dev Summit 2014 mit dem Titel Parallele Geoverarbeitung mit Python-Multiprozessoren und der Methode für kritische Pfade erläutert wird. Dennoch können Sie nicht mehrere Kerne für verwenden die gleiche Aufgabe.

Andernfalls müssen Sie später in diesem Jahr auf die Veröffentlichung von ArcGIS Pro (vollständige 64-Bit-Anwendung) warten, um die Leistung von Multithreading zu testen ... (oder testen Sie jetzt die Beta)


4

Wie bereits erwähnt, wird Multiprocessing in ArcGIS Desktop nicht unterstützt. Wenn ich über die Verarbeitung von GIS-Datasets in einer Desktop-Umgebung spreche, versuche ich herauszufinden, ob ich einen großen Workflow in kleinere Blöcke aufteilen kann, die beim Laden mehrerer Kerne gleichzeitig berechnet werden. Fast jeder Fall sollte einzeln untersucht werden, da sich das Verhalten von GP-Tools erheblich unterscheiden kann.

Überlegen Sie, was bei der Lösung eines einfachen mathematischen Problems schneller geht. Was ist der schnellste Weg, um alle Zahlen von 1 bis 100 zu zählen?

1) indem man die Ergebnisse einzeln summiert und die Summe inkrementell addiert (1 + 2 = 3, 3 + 3 = 6,6 + 4 = 10 usw.). Ein Kern arbeitet an dieser Aufgabe.

2) Werte vorher in einzelne Chunks aufteilen und dort zuerst summieren (1 bis 30, 31 bis 60 und 60 bis 100). Drei Kerne arbeiten gleichzeitig (der letzte Schritt wäre die Summe von drei empfangenen Werten).

Da verschiedene GP-Tools Implementierungen verschiedener Algorithmen mit unterschiedlicher Big-O-Notation sind , müssten Sie diese wahrscheinlich unterschiedlich angehen, um mehrere Prozesse einzureichen.

Ein guter Ausgangspunkt wäre, um zu lernen, wie Multiprocessing- Bibliotheken in Python funktionieren. Ich benutze ziemlich schwer.

Ich habe auch festgestellt, dass das Ausführen von Python-Skripten über eine Befehlszeile mit 64-Bit-Python normalerweise zu einer schnelleren Ausführung führt (im Vergleich zum IDE-Lauf, aber dies ist möglicherweise auf Ihrem Computer nicht der Fall). Die Hintergrund-Geoverarbeitung wurde in 10.1 eingeführt. Versuchen Sie jedoch, die Python-Skripte mit 64-Bit-Python auszuführen und festzustellen, wie sich dies auf die Leistung auswirkt.

ArcGIS Pro, das in einer anderen Antwort genannt wurde, steht in Beta 5 zum Download zur Verfügung (denken Sie daran, dass Sie ein Teilnehmer der Esri Beta-Community sein müssen , um Fehler zu melden , und Zugriff auf ein ArcGIS Online for Organizations- Konto haben müssen, um zu können starte den Pro).


1

Pypy ist eine kompatible Version von Python, die 4-5-mal schneller läuft als CPython (das "Standard" -Python).

Wenn Sie mutig genug sind, es aus dem Quellcode zu erstellen, gibt es einen Zweig , der "mehrere unabhängige, CPU-hungrige Threads gleichzeitig ausführen kann". Dies bedeutet, dass Sie die Vorteile von Multithreading nutzen können, ohne Code neu schreiben zu müssen.


0

Einfache Antwort ist nein. Die bessere Antwort ist, dass es darauf ankommt.

Aufgrund der Implementierung von CPython (dem am häufigsten verwendeten Python) kann davon ausgegangen werden, dass Ihr Python Multithreading nicht nutzen kann. Sehen:

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

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

Beachten Sie, dass IO immun gegen die GIL ist.

Jetzt können Sie daran arbeiten. Wie bereits erwähnt, können Sie Unterprozesse auslösen, und die Multiprozessorbibliothek kann Ihnen dabei helfen.


1
I / O ist immun, ruft aber auch die meisten in C implementierten Funktionen auf, einschließlich der meisten GP-Tools und aller Funktionen in Numpy. Die GIL ist in praktischen GIS-Umgebungen weniger eine Einschränkung als man denkt.
Jason Scheirer

0

Ich kann ArcGIS-Probleme nicht beheben, aber haben Sie bei der Verarbeitung mehrerer Tasks mit Python einen Task-Manager wie Celery (celeryproject.org) in Betracht gezogen? Dazu müssen Sie verschiedene Verarbeitungsaufgaben identifizieren, sie einem "Manager" zur Verteilung übergeben, "Worker" ausführen, die Aufgaben vom Manager erhalten, sie verarbeiten und Ergebnisse melden.

Dies ist nicht trivial zu implementieren, hat aber eine unglaubliche Flexibilität und ermöglicht es Ihnen, die Verarbeitungsfähigkeit voll auszunutzen (dh diese freien Kerne zu verwenden).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.