Gostaria de executar uma tarefa de multiprocessamento a partir de uma ferramenta de suplemento python. Meu problema é que o processo continua falhando. Basicamente trava o ArcMap.
Aqui está o meu código básico:
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 eu executar o código fora do ArcMap ou de uma caixa de ferramentas, ele funcionará sem problemas, mas quando coloco a lógica dentro de um botão, ele causa uma falha no arcmap.
Meu palpite é que o ArcMap está sendo executado em processo para todos os suplementos de python. Existe uma solução alternativa para esse problema?
Eu tentei adicionar o freeze_support () ao código também, mas isso também não fez nada.
arcgis-desktop
arcgis-10.1
arcpy
python-addin
parallel-processing
base de código 5000
fonte
fonte
Respostas:
O processamento paralelo é mais fácil 'mostrado do que feito'. No caso de colocar tudo isso em um botão, estou supondo dois problemas:
Hmm, procurando um problema adicional foi documentado aqui em uma página de Recursos do ArcGIS. O bloqueio do esquema se parece com o culpado.
fonte