我想从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。
                
                
                  
                    —
                    蒂莫西·迈克尔