python.exe의 작동이 중지되었습니다


9

파이썬 스크립트는 약 18 개월 전에 지금 떠난 사람에 의해 작성되었습니다. 그런 다음 필요한 출력을 생성했습니다. 다시 실행하라는 요청을 받았지만 다른 (더 빠른 해상도) 데이터 입력으로 실행했습니다. 입력 데이터 세트는 각각 약 2,700 개의 데이터 포인트로 구성된 20 개의 서브 세트로 분할되었습니다. 그러나 약 300 개의 데이터 포인트가 처리 된 후 스크립트가 충돌합니다 ( "python.exe가 작동을 멈췄습니다") (범위 295-306이며 항상 동일한 레코드에서 실패하지는 않음).

예전처럼, 스크립트는 arcpys가 아닌 arcgisscripting을 사용하여 작성되었습니다. 일반적으로 커서를 사용하여 다음을 수행합니다.

  1. 주어진 지점에 대해 이동 시간 60 분의 컷오프로 비용 거리 (gp.CostDistance_sa 사용)를 계산하십시오.
  2. gp.ExtractValuesToPoints_sa를 호출하여 각 데이터 포인트에서 모든 개별 값을 추출하고 피쳐 클래스를 파일 지오 데이터베이스에 출력합니다.
  3. 위의 b)에서 생성 된 피쳐 클래스를 읽고 값을 CSV 파일에 씁니다 ( "데이터 없음"(값 -9999) 인 점은 생략).

입력 파일에 남아있는 모든 데이터 포인트에 대해 1, 2 및 3을 반복합니다.

처리 시간은 약입니다. 데이터 포인트 당 평균 1 분 관련 기술 사양은 다음과 같습니다.

  • PC에는 2.20GHz에서 실행되는 쿼드 코어 Intel i7-2720QM CPU가 있으며 Windows 7 (64 비트)에서 실행되는 8GB RAM이 있습니다.
  • 파이썬 버전은 2.6.6입니다 (쉘에는 "[32는 32 비트 (Intel)] (win32)").
  • ArcMap 10.0 (SP4)도 설치되어 있습니다.

나는 다른 PC (지금까지 충돌하지 않고)에서 실행 해 보았습니다. 현재 이전 PC에서 작업이 성공적으로 (더 느리게) 실행되고 있으며 충돌없이 419 개의 레코드에 도달했습니다. 이 기계의 관련 사양은 다음과 같습니다.

  • 4GB RAM 및 64 비트 Windows 7을 갖춘 2.93GHz에서 실행되는 Intel Core 2 DUO E7500 프로세서
  • Python 버전 2.5.1 (쉘에는 "[32는 Win32의 MS v v1313 32 비트 (Intel)])입니다.
  • ArcMap 9.3이 설치되어 있습니다 (서비스 팩은 언급되지 않음).

누군가 스크립트가 잠시 작동 한 것으로 보이는 이유와 충돌하는 방법 및 해결 방법에 대한 조언을 제공 할 수 있습니까?

스크립트를 처리하기 위해 다른 PC가 지금까지 나타난다는 사실은 무언가 "환경 적"을 암시합니다.


업데이트로, ARCGIS 9.3을 실행하는 PC는 여전히 데이터를 성공적으로 처리하고 있으며 처리 된 1,300 개의 데이터 포인트에 도달했습니다. 동료는 또한 ARCGIS 10.1을 실행하는 PC에서 데이터를 실행했습니다. 두 번의 별도 사례에서 267 개의 레코드가 충돌 한 것입니다. 결정적이지는 않지만 일반적인 스레드는 Arc 9.3이 데이터를 처리하지만 Arc 10.x는 처리하지 않는 것 같습니다.


1
ArcGIS 10.0은 이제 arcpy 모듈을 사용합니다 (ArcGIS 9.x는 arcgisscripting 모듈을 사용합니다). AGS 10 환경에서 작동하려면 아크 피를 호출하고 지오 프로세싱 도구의 이름을 조정하도록 코드를 재구성해야합니다.
dchaboya

5
아닙니다. 9.3에서 작동했던 오래된 스크립트는 10 및 10.1에서 계속 작동합니다. 당신은 하지 않습니다 arcpy에 GP를 수정해야합니다. 새로운 기능을 추가하지만 완전히 변환하지 않으려는 경우 스크립트 전체에서 gp와 arcpy를 혼합 할 수도 있습니다. ..... 왜이 특별한 사건이 발생하는 지 모르겠습니다. 내 제안은 그것을 섹션으로
나누고

KHibma, 예, AGS 10에서 실행할 때 부분적으로 작동 한 것으로 생각됩니다.
dchaboya

데이터 포인트가 변경 되었습니까? 나는 당신이 도로 네트워크까지의 거리 (여행 시간) 내에 시설을 사용하고 있다고 가정합니다. 데이터 포인트 처리 알고리즘이 프로세스가 실행될 때마다 포인트를 정확히 동일하게 관리한다고 보장 할 수는 없습니다. 300 또는 306 또는 부수적 일 수있는 모든 것. 파이썬 스크립트에서 도로와 위치를 기반으로 네트워크의 비용 분석에 NA를 사용했으며 더 작은 하위 집합을 시도했는지 궁금합니다. 내 워크 스테이션에서 60 분 동안 워크 스테이션에서 훨씬 작은 지점 그룹을 실행합니다. 이동 시간 분석은 처리 능력을 파괴합니다.
JLP Wisc.

1
불행히도 우리는 arcpy GP (실제로는 COM 래퍼이며 버그가있는 것처럼 보임)의 안정성 문제에 직면하고 있습니다. arcpy는 내가 아는 유일한 사이트 패키지이며 실제로 파이썬 인터프리터를 충돌시킬 수 있습니다. CLJ는 여기에 답변 (64 비트 GP, GA 커서 사용 등)에서 몇 가지 해결 방법을 제안했지만 이미 ESRI에서 이러한 문제가 버그라는 응답을 받았습니다. 희망 다음 서비스 팩이에 개선을 제공합니다
위르겐 Zornig

답변:


1

작업 관리자를 실행하고 메모리에서 python 실행 파일이 증가하고 죽기 전에 1GB를 초과하면 10.1 64 비트 지오 프로세싱으로 업그레이드하면 도움이 될 수 있습니다.

성능을 위해 커서를 사용하는 경우 새로운 arcpy.da 커서를 활용할 수 있습니다. http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000008000000

arcpy.da를 사용하도록 프로젝트를 업그레이드했으며 2 배 개선되었습니다.


1

이것은 단순히 이상한 버그입니다. 충돌을 일으키는 단계를 사용하지 않도록 시도 할 수 있지만 일반적으로 긴 데이터 목록을 처리하는 데 사용될 때 다른 도구에서 발생합니다. 내가 찾은 유일한 해결 방법은 스크립트가 디스크로 이동하는 동안 진행 상황을 저장하여 프로세스를 다시 시작하면 어디에서 픽업해야하는지 알 수 있도록하는 것입니다. 그런 다음 레지스트리를 변경하여 Windows 디버거 메시지를 비활성화하면 (아래 참조) 사이에있을 때마다 프로세스를 수동으로 닫을 필요없이 전체 배치를 완료 할 때까지 cmd.exe에서 스크립트를 반복적으로 실행할 수 있습니다.

나는 이것이 끔찍한 해결 방법이라는 것을 알고 있지만 파이썬 라이브러리가 파이썬 인터프리터를 죽이는 것은 드문 일입니다.

DWORD HKLM or HKCU\Software\Microsoft\Windows\Windows Error Reporting\DontShowUI = "1"
DWORD HKLM or HKCU\Software\Microsoft\Windows\Windows Error Reporting\Disabled = "1"

0

스크립트가 커서를 처리하는 방법을 확인 했습니까? 명시 적을 사용하여 닫는 것을 잊었을 때 종종 응용 프로그램이 중단되는 경우가 종종 del row, cursor있습니다.

그래도 도움이되지 않으면 코드 및 / 또는 데이터의 작은 부분을 사용하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.