Chciałbym uruchomić zadanie wieloprocesowe z narzędzia dodatkowego do Pythona. Moim problemem jest to, że proces ciągle się nie udaje. Zasadniczo powoduje awarię ArcMap.
Oto mój podstawowy kod:
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'
Jeśli uruchomię kod poza ArcMap lub z przybornika, działa to bez problemu, ale kiedy wstawię logikę do przycisku, spowoduje to awarię arcmap.
Domyślam się, że ArcMap działa dla wszystkich dodatków do Pythona. Czy istnieje rozwiązanie tego problemu?
Próbowałem również dodać do kodu freeze_support (), ale to też nic nie dało.