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.
arcgis-desktop
arcgis-10.1
arcpy
python-addin
parallel-processing
Codebasis 5000
quelle
quelle
Antworten:
Parallelverarbeitung ist einfacher "gezeigt als getan". Wenn ich das alles in einen Knopf packe, schätze ich zwei Probleme:
Ein weiteres Problem wurde hier auf einer Seite mit ArcGIS-Ressourcen dokumentiert . Schemasperre sieht aus wie der Täter.
quelle