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 () до коду, але це також нічого не робило.


1
Якщо ArcMap виходить з ладу, зверніться до служби підтримки ESRI. якщо вони зможуть повторити його, вони визнають його помилку (а можливо, навіть виправлять її один день).
GIS-Jonathan

Ви встановили всі 5 пакетів послуг для ArcGIS 10.x, які вже вийшли? Можливо, це допоможе
Сергіос Коліос

ОП використовує 10.1
Петра Кребса

Також пакети послуг є накопичувальними, тому вам потрібно встановити лише останній, а не кожен підряд.
blah238

SP1 для 10.1 був випущений на цьому тижні.
Тимофій Майкл

Відповіді:


8

Паралельна обробка легше "показано, ніж зробити". Що стосується того, як все це заповнити кнопкою, я здогадуюсь про два питання:

  1. Кілька потоків блокують потік інтерфейсу ArcMap або
  2. ArcMap ставить власну схему блокування в джерело даних і не дозволяє доступу python до даних.

Хм, шукаючи подальший випуск, було задокументовано тут, на сторінці ресурсів ArcGIS. Блокування схеми схоже на винуватця.


Не впевнений, чи хотіли ви пов’язати щось інше, ніж те, що ви робили (повідомлення на форумах ArcGIS, а не офіційний документ).
blah238

Форум є правильним посиланням. Коли хтось знайде більше офіційної документації, він може сміливо опублікувати її.
WolfOdrade

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