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.