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.
arcgis-desktop
arcgis-10.1
arcpy
python-addin
parallel-processing
basis kode 5000
sumber
sumber
Jawaban:
Pemrosesan paralel lebih mudah 'ditampilkan daripada dilakukan.' Dalam hal memasukkan semua ini ke dalam tombol, saya menduga dua masalah:
Hmm mencari masalah lebih lanjut telah didokumentasikan di sini di halaman Sumber Daya ArcGIS. Skema kunci terlihat seperti pelakunya.
sumber