我想从python外接程序工具运行多处理任务。我的问题是该过程不断失败。基本上会使ArcMap崩溃。
这是我的基本代码:
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'
如果我在ArcMap之外或从工具箱中运行代码,则可以正常工作,但是当我将逻辑放在按钮内时,它将导致arcmap崩溃。
我的猜测是ArcMap正在针对所有python加载项运行。有没有解决此问题的方法?
我也尝试在代码中添加freeze_support(),但这也无济于事。
1
如果ArcMap崩溃,请联系您的ESRI支持。如果他们可以复制它,他们将承认它的错误(甚至有一天可以修复)。
—
GIS-乔纳森(Jonathan)
您是否已经安装了全部5个ArcGIS 10.x Service Pack?也许会有帮助
—
Sergios Kolios 2012年
OP正在使用10.1
—
Petr Krebs
而且Service Pack是累积性的,因此您只需要安装最新的Service Pack,而不是依次安装每个Service Pack。
—
blah238
本周发布了10.1版的SP1。
—
蒂莫西·迈克尔