Saya ingin menjalankan tugas multiprosesing dari alat tambahan python. Masalah saya adalah prosesnya terus gagal. Pada dasarnya crash ArcMap.
Ini kode dasar saya:
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'
Jika saya menjalankan kode di luar ArcMap atau dari kotak alat, ia bekerja tanpa masalah, tetapi ketika saya meletakkan logika di dalam sebuah tombol, itu menyebabkan arcmap lumpuh.
Dugaan saya adalah bahwa ArcMap sedang berjalan untuk semua add-in python. Apakah ada solusi untuk masalah ini?
Saya sudah mencoba menambahkan di freeze_support () ke kode juga, tapi itu tidak berhasil.