Методи оптимізації багатокористувацької обробки в ArcGIS


12

Мене цікавлять методи навчання, щоб використовувати повну міру багатоядерної потужності обробки, наявної на настільному комп’ютері. Arc стверджує, що геопроцесоризація фону дозволяє користувачеві використовувати декілька ядер, однак завдання, по суті, повинні зачекати в черзі, щоб виконати попереднє завдання.

Хто-небудь розробляв паралельні чи багатопотокові методи геообробки в Arc / Python? Чи існують технічні вузькі місця, які перешкоджають багатоядерній обробці окремих завдань?

Я знайшов цікавий приклад у Stackoverflow, який зацікавив мене, хоча це не приклад геообробки:

from multiprocessing import Pool
import numpy

numToFactor = 976

def isFactor(x):
    result = None
    div = (numToFactor / x)
    if div*x == numToFactor:
        result = (x,div)
    return result

if __name__ == '__main__':
    pool = Pool(processes=4)
    possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
    print 'Checking ', possibleFactors
    result = pool.map(isFactor, possibleFactors)
    cleaned = [x for x in result if not x is None]
    print 'Factors are', cleaned

1
З мого досвіду Arc, це майже завжди зводиться до будь-якого 1) розбиття ваших даних на {кількість основних} фрагментів, обробки та повторної збірки або 2) зчитування всього в пам'яті та дозволу x API обробляти нитки. зауважте, що this is not meant to discourage.
клапан Лондон

Дякую клапан Лондон. Можливо, новіша технологія Ivy Bridge та графічний процесор Kepler дозволять забезпечити більш складні підходи до обробки.
Аарон

Ось посилання на корисний блог про багатопроцесорне управління пітоном від продуктового інженера в ESRIs Analysis and Geoprocessing team. blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Аарон

Відповіді:


11

Ось приклад багатоядерного скрипта для arcpy. Процес дуже інтенсивний процесором, тому він дуже добре масштабується: Перенос коду Avenue для створення будівельних тіней для ArcPy / Python для ArcGIS Desktop?

Ще кілька загальних відомостей у цій відповіді: Чи можуть одночасні процеси виконуватись в одній моделі?


11

На мій досвід, найбільша проблема - це стабільність. Якщо ви зробите шість тижнів обробки за одну ніч, у вас також буде шість тижнів незрозумілих помилок та помилок.

Альтернативний підхід полягає у розробці автономних сценаріїв, які можуть працювати незалежно та виходити з ладу без проблем:

  • Розбийте дані на шматки, які може обробити одне ядро ​​за <20 хвилин (завдання).
  • Побудуйте окремий скрипт Arcpy, який може обробити одне завдання і максимально простий (працівник).
  • Розробіть механізм виконання завдань. Існує багато існуючих рішень python. Крім того, ви можете зробити власну за допомогою простої черги.
  • Напишіть код, щоб переконатися, що завдання виконані. Це може бути так само просто, як перевірити, чи був записаний вихідний файл.
  • Об’єднайте дані назад разом.

1
Я виявив, що цей підхід, який може включати використання багатопроцесорного модуля, є хорошим - деякі розширення, наприклад, просторовий аналітик, працюють не дуже добре, якщо у вас одночасно працює декілька копій однієї і тієї ж функції, тому щось подібне те, що ви описуєте, що дозволяє керувати користувачем форму черги (тобто уникає планування цих завдань одночасно або уникає використання тієї ж бази геоданих відразу з міркувань блокування файлів), буде найкращим.
nicksan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.