Me gustaría ejecutar un multiprocesamiento tarea de un add-in de python herramienta. Mi problema es que el proceso suele fallar. Básicamente, los accidentes de ArcMap.
Aquí está mi código de basic:
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'
Si ejecuto el código fuera de ArcMap o de una caja de herramientas, funciona sin problema, pero cuando pongo la lógica dentro de un botón, hace que arcmap se bloquee.
Mi conjetura es que ArcMap se está ejecutando en el proceso para todos los python add-ins. Hay una solución para este problema?
He intentado añadir en el freeze_support() en el código, pero que no hizo nada así.