Multithread-Verarbeitung in QGIS aktivieren?

11

Ich habe mehrere Links gefunden, die darauf hinweisen, dass dies jetzt in QGIS 2.2 vorhanden ist, aber es scheint, dass nur ein Kern für die volle Kapazität verwendet wird.

Dies läuft unter Ubuntu 14.04

Der aktuelle Prozess erstellt eine große Anzahl regulärer Punkte. Wie kann ich dafür sorgen, dass dieser Prozess mehr als einen Kern verwendet?

CPU auslastung

jpmaniac87
quelle
1
Ich denke, dies wird in 2.4, der nächsten Version, sein. Wenn Sie es jedoch ausprobieren möchten, laden Sie den nächtlichen Build herunter.
Matt
Es ist wahrscheinlich erwähnenswert, dass aufgrund der GIL "Multithreading" keine gleichzeitigen Kerne ausführen wird. Schauen Sie sich stackoverflow.com/questions/1294382/… an. Was Sie wollen, ist "Multiprocessing".
Herr Purple

Antworten:

6

Es gibt kein Multithread-Rendering für QGIS 2.2, sondern eine Funktion, die in QGIS 2.4 verfügbar sein wird.

Sie können QGIS Master (jede Nacht) zum Testen ausprobieren. Die Veröffentlichung von QGIS 2.4 ist für den 20. Juni 2014 geplant .


Hoppla, lesen Sie Ihre Frage falsch und aus den Kommentaren geht hervor, dass Multithread-Verarbeitung entweder auf der Ebene der QGIS-Entwickler oder auf der Ebene der Python-Plugins erfolgt.

Wenn Sie ein bestimmtes QGIS-Tool aus den in QGIS integrierten Menüs verwenden, um eine Multithread-Verarbeitung zu erhalten, muss es wahrscheinlich von einem Entwickler für QGIS oder sogar im Stammverzeichnis des Tools (GDAL, SAGA, Orfeo, GRASS, R Entwickler, etc ...).

Wenn es ein bestimmtes Plugin gibt, das höchstwahrscheinlich in Python codiert ist, kann der Mitwirkende oder Betreuer dieses Plugins feststellen, ob es möglich ist, das multiprocessingoder die threadingModule einzuschließen, um die Leistung zu verbessern.

In beiden Fällen ist es in der Regel am besten, eine Funktionsanforderung zu senden oder festzustellen, ob bereits eine vorhanden ist. Es würde Sie wissen lassen, ob bereits jemand die Verbesserung in Angriff nimmt oder welche Ressourcen benötigt werden, um sie zu starten.

SaultDon
quelle
Das ist eine Schande ... Ich hatte in der Vergangenheit Probleme, aus der Quelle zu bauen. Wenn ich nur den ppa für die Nightlies hinzufüge und trotzdem mit apt installiere, würde mir das den neuesten Nightly geben? Irgendeine Idee zur Stabilität?
jpmaniac87
@ jpmaniac87 Ich habe Ubuntu schon lange nicht mehr verwendet und mache meine GIS-Arbeit unter Arch Linux, also kompiliere ich alles aus dem Quellcode. Ich würde also nicht wissen, wie die PPAs für Ubuntu sind und ob Sie QGIS (stabil) gleichzeitig mit QGIS (master) installieren könnten.
SaultDon
@ jpmaniac87 Aus dieser Antwort in einer anderen Frage geht hervor , dass dies möglicherweise nicht möglich ist, wenn man bedenkt , wie die QGIS-Versionen unter Ubuntu gepackt sind. Sieht so aus, als wäre es der eine oder andere.
SaultDon
Die PPAs funktionieren. Ich habe gerade die stabilen Leitungen auskommentiert und die nächtliche installiert. Es ist schnell! Aber ... es werden nur die mehreren Threads buchstäblich zum Rendern verwendet ... Ich hatte gehofft, dass mehr Plugin-Prozesse möglich sind. Ich denke, das würde bedeuten, dass die Plugin-Ersteller eine Multithread-Verarbeitung in ihrem Code zulassen müssten.
jpmaniac87
1
@ jpmaniac87 Ja, da Plugins mit Python erstellt wurden und es ein multiprocessingoder threading ( threadingnormalerweise mit queue) Modul für Python gibt, das sie speziell zu ihren Skripten hinzufügen müssten.
SaultDon
3

Kommt darauf an, wonach du suchst. Wenn die Verarbeitung auf das neue Task-Manager-Framework portiert wird, können Algorithmen (soweit möglich) parallel ausgeführt werden. Beispielsweise kann ein Puffer für eine Ebene ausgeführt werden, während eine Transformation auf einer anderen Ebene erfolgt. Wenn Sie nach einer Parallelisierung innerhalb eines einzelnen Algorithmus suchen (z. B. Pufferfunktionen mit mehreren Threads), sind mir keine Pläne bekannt, dies zu tun.

Quelle: http://osgeo-org.1560.x6.nabble.com/Will-Processing-in-QGIS-3-support-parallelization-td5301809.html


Alte Antwort: Während des Google Summer of Code 2015 wurde Multithreading-Unterstützung für die QGIS-Verarbeitung entwickelt. Der Code wird derzeit überprüft und voraussichtlich 2016 in der Entwicklerversion veröffentlicht. (Quelle: http://boundlessgeo.com/2015/12/latest-developments-in-qgis-processing/ )

... Diese Lösung konnte leider nicht zusammengeführt werden.

Unterdunkel
quelle
Irgendwelche Updates zu diesem Thema @underdark?
Ricardo Barros Lourenço
Leider ist die Parallelisierung in den meisten Anwendungen immer noch begrenzt. Meines Wissens nach ermöglicht die Verwendung einer Datenbankinfrastruktur wie PostGIS / postgres eine stärker integrierte Verwaltung von Abfragen und bessere Multithreading-Funktionen.
CrystallineEntity
2

Einige Threads werden in die QGIS-Kernfunktionalität integriert (Rendering beispielsweise wie in der Antwort von SaultDons beschrieben), aber viele Funktionen oder Algorithmen können je nach ihrer Entwicklung Threading enthalten oder nicht.

Für diejenigen pyQGIS-Plugin-Autoren (möglicherweise einschließlich OP), die Threading in ihr Plugin / Skript aufnehmen möchten, gibt es Hilfe im snorfalorpagus-Blog. Hoffentlich werden immer mehr Entwickler Threading verwenden - insbesondere für die anspruchsvolleren Algorithmen.

Als Notlösung können Sie möglicherweise Ihren Prozess skripten und ein schlechtes paralleles Prozessschema mit Aufrufen asychroner Shell-Skripte verwenden, wie in der Antwort von alexis hier beschrieben

Wenn jemand andere gute Ressourcen für die Parallelisierung von QGIS-Jobs hat, können Sie diese gerne bearbeiten und zu dieser Antwort hinzufügen :)

Herr Lila
quelle