ArcGIS 10.1 Python AddIn 멀티 프로세싱을 사용하면 ArcMap이 충돌합니까?


20

파이썬 추가 기능 도구에서 다중 처리 작업을 실행하고 싶습니다. 내 문제는 프로세스가 계속 실패한다는 것입니다. 기본적으로 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은 모든 파이썬 추가 기능에 대해 처리 중입니다. 이 문제에 대한 해결 방법이 있습니까?

코드에 freeze_support ()를 추가하려고 시도했지만 아무것도하지 않았습니다.


1
ArcMap이 충돌하면 ESRI 지원 센터에 문의하십시오. 그들이 복제 할 수 있다면 버그를 인정하고 언젠가는 고칠 수도 있습니다.
GIS-Jonathan

이미 출시 된 ArcGIS 10.x 용 5 개의 서비스 팩을 모두 설치 했습니까? 아마도 도움이 될 것입니다
Sergios Kolios

영업 이익은 10.1 사용
페트르 크렙스

또한 서비스 팩은 누적되므로 최신 버전 만 설치하지 않고 각각 연속해서 설치하면됩니다.
blah238

10.1 SP1이 이번 주에 릴리스되었습니다.
Timothy Michael

답변:


8

병렬 처리는 '완료된 것보다 쉽습니다'. 이 모든 것을 버튼에 넣는 경우 두 가지 문제가 있다고 생각합니다.

  1. 여러 스레드가 ArcMap UI 스레드를 차단하거나
  2. ArcMap은 데이터 소스에 자체 스키마 잠금을 설정하고 파이썬 프로세스가 데이터에 액세스하는 것을 허용하지 않습니다.

흠 찾는 추가 문제는 여기 ArcGIS Resources 페이지에서 설명되었습니다 . 스키마 잠금은 범인처럼 보입니다.


자신이하지 않은 것 (공식 문서가 아닌 ArcGIS 포럼 게시물)을 연결하려고했는지 확실하지 않습니다.
blah238

포럼은 올바른 링크입니다. 더 공식적인 문서를 발견하면 자유롭게 게시 할 수 있습니다.
WolfOdrade

제안 해 주셔서 감사합니다. 나는 그것이 실제로 # 1에 의한 것이라고 생각합니다. ArcMap UI의 스레드 블록입니다. 나는 SDE 데이터베이스를 사용하고 있으므로 스키마 잠금은 내 문제가 아닙니다.
코드베이스 5000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.