Ich möchte eine Multiprocessing-Task mit einem Python-Add-In-Tool ausführen. Mein Problem ist, dass der Prozess immer wieder fehlschlägt. Grundsätzlich stürzt ArcMap ab.
Hier ist mein Basiscode:
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'
Wenn ich den Code außerhalb von ArcMap oder in einer Toolbox ausführe, funktioniert er problemlos, aber wenn ich die Logik in eine Schaltfläche einbaue, stürzt arcmap ab.
Ich vermute, dass ArcMap für alle Python-Add-Ins in Bearbeitung ist. Gibt es eine Lösung für dieses Problem?
Ich habe versucht, dem Code auch freeze_support () hinzuzufügen, aber das hat auch nichts gebracht.