ArcGIS 10.1 Python AddIn Использование многопроцессорной обработки приводит к сбою ArcMap?

20

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

Вот мой основной код:

def function(startOID, endOID, fc):

    wrksp = r"c:\temp\mp_addintest\data\test_%s.txt" % (int(startOID) + int(endOID))
    # real logic removed to dumb it down
    with open(wrksp, 'w') as writer:
        writer.write("%s to %s from %s \n" % (startOID, endOID, fc))
    return wrksp
class btnMP(object):
    """Implementation for src_addin.MPButton (Button)"""
    def __init__(self):
        self.enabled = True
        self.checked = False
    def onClick(self):
        pool = None
        try:
            pythonExe = os.path.join(sys.exec_prefix, 'python.exe')
            multiprocessing.set_executable(pythonExe)
            pool = multiprocessing.Pool(4)
            results = []
            for i in xrange(4):
                results.append(pool.apply_async(function, [str(1),
                                      str(i),
                                      str("test")]))
            pool.close()
            pool.join()
            for result in results:
                print result.get()
        except:
            del pool
            print 'error'

Если я запускаю код вне ArcMap или из набора инструментов, он работает без проблем, но когда я помещаю логику в кнопку, это вызывает сбой arcmap.

Я предполагаю, что ArcMap работает в процессе для всех надстроек Python. Есть ли решение этой проблемы?

Я также попытался добавить в код freeze_support (), но это тоже ничего не дало.

кодовая база 5000
источник
1
Если происходит сбой ArcMap, обратитесь в службу поддержки ESRI. если они могут повторить это, они признают ошибку (и, возможно, даже исправят ее однажды).
ГИС-Джонатан
Вы установили все 5 пакетов обновлений для ArcGIS 10.x, которые уже выпущены? Может быть, это поможет
Сержиос Колиос
ОП использует 10.1
Петр Кребс
Также пакеты обновления являются накопительными, поэтому вам нужно установить только последний, а не каждый из них подряд.
blah238
SP1 для 10.1 был выпущен на этой неделе.
Тимоти Майкл

Ответы:

8

Параллельная обработка легче «показана, чем выполнена». В случае вставки всего этого в кнопку, я предполагаю две проблемы:

  1. Несколько потоков блокируют поток пользовательского интерфейса ArcMap, или
  2. ArcMap устанавливает собственную блокировку схемы для источника данных и не разрешает процессу Python доступ к данным.

Хм, смотря дальше, проблема была задокументирована здесь на странице ресурсов ArcGIS. Схема блокировки выглядит как преступник.

WolfOdrade
источник
Не уверен, что вы хотели связать что-то кроме того, что вы делали (сообщение на форуме ArcGIS, а не официальный документ).
blah238
На форуме есть правильная ссылка. Когда кто-то находит больше официальной документации, он может свободно размещать ее.
WolfOdrade
Спасибо вам за ваши предложения. Я считаю, что это на самом деле вызвано # 1. Поток блокируется для пользовательского интерфейса ArcMap. Я использую базу данных SDE, поэтому блокировки схемы здесь не мои проблемы.
код базы 5000