Включение многопоточной обработки в QGIS?

11

Я нашел несколько ссылок, которые, кажется, говорят, что это теперь существует в QGIS 2.2, но похоже, что он использует только одно ядро ​​для полной загрузки.

Это работает на Ubuntu 14.04

Текущий процесс создает большое количество регулярных точек. Как я могу заставить этот процесс использовать больше, чем одно ядро?

Использование процессора

jpmaniac87
источник
1
Я думаю, что это будет в 2.4, следующий выпуск. Однако, если вы хотите попробовать это, скачайте ночные сборки.
Мэтт
Вероятно, стоит прокомментировать, что из-за GIL «многопоточность» не будет работать параллельными ядрами. Проверьте stackoverflow.com/questions/1294382/… То, что вы хотите, это "многопроцессорная обработка".
Мистер Пурпур

Ответы:

6

В QGIS 2.2 нет многопоточного рендеринга, это функция, которая будет доступна в QGIS 2.4.

Вы можете попробовать QGIS Master (по ночам) для тестирования, а затем выпуск QGIS 2.4 запланирован на 20 июня 2014 года .


К сожалению, неправильно прочитал ваш вопрос, и из комментариев это выглядит так, как будто многопоточная обработка происходит на уровне разработчика QGIS или на уровне участника Python Plugin.

Если есть определенный инструмент QGIS, который вы используете из меню, встроенного в QGIS, чем для многопоточной обработки, его, вероятно, нужно будет кодировать разработчиком для QGIS или даже в корне инструмента (GDAL, SAGA, Orfeo, GRASS, R разработчики и т.д ...).

Если есть определенный плагин, то, скорее всего, он написан на Python, и разработчик или разработчик этого плагина может увидеть, возможно ли включить модули multiprocessingили threadingдля повышения его производительности.

В любом случае, отправка запроса на функцию или проверка его наличия обычно является лучшим способом начать работу. Это даст вам знать, если кто-то уже взялся за улучшение или какие ресурсы понадобятся для его запуска.

SaultDon
источник
Это позор ... У меня были проблемы с сборкой из источника в прошлом. Если я просто добавлю ppa для nightlies и установлю все то же самое с apt, это даст мне последний вечер? Есть идеи по стабильности?
jpmaniac87
@ jpmaniac87 Я давно не пользовался Ubuntu и работаю над ГИС в Arch Linux, поэтому я собираю все из исходных текстов. Так что я не знаю, как работают PPA для Ubuntu и можно ли установить QGIS (стабильный) с QGIS (master) одновременно.
SaultDon
@ jpmaniac87 Из этого ответа на другой вопрос похоже, что это может быть невозможно, учитывая, как версии QGIS упакованы в Ubuntu. Похоже, это один или другой.
SaultDon
PPA действительно работают. Я просто закомментировал стабильные линии и установил каждую ночь. Это быстро! Но ... он использует только несколько потоков буквально для рендеринга ... Я надеялся, что больше плагинов процессов. Я предполагаю, что это означало бы, что создатели плагинов должны были бы разрешить многопоточную обработку в их коде?
jpmaniac87
1
@ jpmaniac87 Да, потому что плагины создаются с помощью Python, и для Python есть модуль multiprocessingили threading ( threadingобычно используется с queue), который они должны были бы специально добавить в свои скрипты.
SaultDon
3

Зависит от того, что вы после. Когда обработка перенесена в новую среду диспетчера задач, алгоритмы смогут работать параллельно (где это возможно). Например, буфер для одного слоя может работать, в то время как преобразование происходит на другом уровне. Если вы после распараллеливания в рамках одного алгоритма (например, буферизация объектов с использованием нескольких потоков), то я не знаю ни одного плана для этого.

Источник: http://osgeo-org.1560.x6.nabble.com/Will-Processing-in-QGIS-3-support-parallelization-td5301809.html


Старый ответ: во время Google Summer of Code 2015 была разработана поддержка многопоточности для QGIS Processing. Код в настоящее время пересматривается и, как ожидается, появится в версии для разработчиков в 2016 году. (Источник: http://boundlessgeo.com/2015/12/latest-developments-in-qgis-processing/ )

... К сожалению, это решение не может быть объединено.

Подземье
источник
Любое обновление по этому вопросу @underdark?
Рикардо Баррос Лоуренсо
Распараллеливание все еще ограничено в большинстве приложений, к сожалению. Насколько я понимаю, использование инфраструктуры базы данных, такой как PostGIS / postgres, позволяет более интегрированно управлять запросами и обладает лучшими возможностями многопоточности.
CrystallineEntity
2

Некоторая многопоточность включена в базовую функциональность QGIS (рендеринг, например, как описано в ответе SaultDons), но многие функции или алгоритмы могут иметь или не иметь встроенную многопоточность в зависимости от их развития.

Для тех авторов плагинов pyQGIS (возможно, включая OP), которые хотят включить многопоточность в свой плагин / скрипт, некоторая помощь доступна в блоге snorfalorpagus. Надеемся, что все больше и больше разработчиков будут использовать многопоточность - особенно для более сложных алгоритмов.

В качестве временного промежутка вы можете создавать сценарии для своего процесса и использовать схему параллельных процессов с плохой структурой, используя вызовы асинхронных сценариев оболочки, как описано в ответе alexis здесь.

Если у кого-то еще есть хорошие ресурсы для распараллеливания заданий QGIS, пожалуйста, не стесняйтесь редактировать и добавлять их к этому ответу :)

Мистер пурпурный
источник