Tôi muốn chạy một tác vụ đa xử lý từ một công cụ bổ trợ python. Vấn đề của tôi là quá trình tiếp tục thất bại. Về cơ bản sự cố ArcMap.
Đây là mã cơ bản của tôi:
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'
Nếu tôi chạy mã bên ngoài ArcMap hoặc từ hộp công cụ, nó sẽ hoạt động mà không gặp vấn đề gì, nhưng khi tôi đặt logic bên trong một nút, nó sẽ khiến arcmap bị sập.
Tôi đoán là ArcMap đang chạy trong quá trình cho tất cả các bổ trợ python. Có một công việc xung quanh cho vấn đề này?
Tôi cũng đã thử thêm freeze_support () vào mã, nhưng điều đó cũng không có gì.