ArcGIS 10.1 Python AddIn Utilizzo di arresti anomali del multiprocesso ArcMap?


20

Vorrei eseguire un'attività multiprocessore da uno strumento aggiuntivo Python. Il mio problema è che il processo continua a fallire. Fondamentalmente si arresta in modo anomalo ArcMap.

Ecco il mio codice di base:

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'

Se eseguo il codice all'esterno di ArcMap o da una casella degli strumenti, funziona senza problemi, ma quando inserisco la logica in un pulsante, provoca l'arresto anomalo di arcmap.

La mia ipotesi è che ArcMap sia in esecuzione per tutti i componenti aggiuntivi di Python. C'è un problema per questo problema?

Ho provato ad aggiungere freeze_support () anche al codice, ma anche quello non ha fatto nulla.


1
Se ArcMap si arresta in modo anomalo, contattare il supporto ESRI. se riescono a replicarlo, riconosceranno che è un bug (e forse lo risolveranno anche un giorno).
GIS-Jonathan,

Sono stati installati tutti i 5 Service Pack per ArcGIS 10.x che sono già disponibili? Forse questo ti aiuterà
Sergios Kolios il

L'OP sta usando 10.1
Petr Krebs il

Anche i service pack sono cumulativi, quindi è necessario installare solo l'ultimo, non ciascuno in successione.
blah238,

SP1 per 10.1 è stato rilasciato questa settimana.
Timothy Michael,

Risposte:


8

L'elaborazione parallela è più semplice "mostrato che fatto". Nel caso di inserire tutto questo in un pulsante, sto indovinando due problemi:

  1. Più thread bloccano il thread dell'interfaccia utente di ArcMap o
  2. ArcMap inserisce il proprio blocco dello schema sull'origine dati e non consente al processo Python di accedere ai dati.

Hmm alla ricerca di ulteriori problemi è stato documentato qui in una pagina delle risorse ArcGIS. Il blocco dello schema sembra il colpevole.


Non sono sicuro se intendevi collegare qualcosa di diverso da quello che hai fatto (un post sui forum ArcGIS, non un documento ufficiale).
blah238

Il forum è il link corretto. Quando qualcuno trova altra documentazione ufficiale, può sentirsi libero di pubblicarla.
WolfOdrade,

Grazie per i vostri suggerimenti. Credo che sia effettivamente causato dal n. 1. Il thread si blocca per l'interfaccia utente di ArcMap. Sto usando un database SDE, quindi i blocchi dello schema non sono i miei problemi qui.
base di codice 5000
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.