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)?
arcpy
arcgis-10.0
Mahmoud Hageer
quelle
quelle
Antworten:
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)
quelle
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).
quelle
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.
quelle
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.
quelle
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).
quelle