python.exe parou de funcionar

9

Um script python foi escrito há cerca de 18 meses por uma pessoa que já saiu. Produziu as saídas necessárias então. Me pediram para executá-lo novamente, mas com entradas de dados diferentes (resolução mais fina). O conjunto de dados de entrada foi dividido em 20 subconjuntos de aproximadamente 2.700 pontos de dados cada. No entanto, o script falha ("python.exe parou de funcionar") depois que aproximadamente 300 pontos de dados foram processados ​​(intervalo 295 a 306 e nem sempre falham no mesmo registro).

Como antigo (ish), o script foi escrito usando arcgisscripting e não arcpy. Em geral, ele faz o seguinte usando cursores:

  1. Para um determinado ponto, calcule a distância de custo (usando gp.CostDistance_sa) com um corte de 60 minutos de tempo de viagem.
  2. Chama gp.ExtractValuesToPoints_sa para extrair todos os valores individuais em cada ponto de dados e gera uma classe de recurso em um geodatabase de arquivo.
  3. Lê a classe de recurso criada em b) acima e grava os valores em um arquivo CSV (omitindo quaisquer pontos com "Sem dados" (valor -9999)).

Repete 1, 2 e 3 para todos os pontos de dados restantes no arquivo de entrada.

O tempo de processamento é de aprox. 1 minuto por ponto de dados em média. Aqui estão algumas especificações técnicas relevantes:

  • O PC possui uma CPU Intel i7-2720QM quad core rodando a 2.20GHz com 8GB de RAM rodando Windows 7 (64 bits).
  • A versão do Python é 2.6.6 (o shell também indica "[MSC v, 1500 32 bits (Intel)] no win32).
  • O ArcMap 10.0 (SP4) também está instalado.

Eu tentei executá-lo em um PC diferente (até agora sem travar). Atualmente, o trabalho está sendo executado com êxito (mas mais lentamente) em um PC mais antigo e atingiu 419 registros sem travar. As especificações relevantes para esta máquina são:

  • Processador Intel Core 2 DUO E7500, rodando a 2.93GHz com 4 GB de RAM e Windows 7 de 64 bits.
  • Python versão 2.5.1 (o shell também indica "[MSC v, 1310 32 bits (Intel)] no win32).
  • O ArcMap 9.3 está instalado (sem menção a nenhum Service Pack).

Alguém pode oferecer alguns conselhos sobre por que o script parece funcionar por um tempo e depois falhar e como resolvê-lo?

O fato de um PC diferente aparecer (até agora) para manipular o script sugere algo "ambiental".


Como atualização, o PC executando o ARCGIS 9.3 ainda está processando com êxito os dados e alcançou 1.300 pontos de dados processados ​​(e ainda contando). Um colega também executou os dados em seu PC executando o ARCGIS 10.1 - ele travou após 267 registros em duas ocasiões separadas. Embora não seja conclusivo, o fio comum parece ser que o Arc 9.3 processará os dados, mas o Arc 10.x não.

user14134
fonte
11
O ArcGIS 10.0 agora usa o módulo arcpy (o ArcGIS 9.x usa o módulo arcgisscripting). Você precisará reconfigurar seu código para chamar arcpy e ajustar os nomes de qualquer ferramenta de geoprocessamento, se desejar que ele funcione no ambiente AGS 10.
dchaboya
5
Não, isso não é certo - os scripts antigos que funcionavam no 9.3 continuarão funcionando no 10 e 10.1. Você não precisa modificar o gp para arcpy. Você pode até misturar gp e arcpy ao longo de um script, se desejar adicionar novas funcionalidades, mas não converter completamente. ..... por que esse caso em particular está falhando acima, eu não sei. Minha sugestão é decompô-lo para seções e ver exatamente a última ferramenta / função para acontecer antes fianças python
KHibma
KHibma, sim, eu guesse que faz sentido, uma vez que foi parcialmente trabalhando quando executado a partir AGS 10.
dchaboya
Os pontos de dados foram alterados? Suponho que você esteja usando instalações a uma curta distância da rede rodoviária (tempo de viagem). Não há garantia de que o algoritmo para processar pontos de dados gerencie os pontos exatamente da mesma maneira sempre que o processo for executado. 300 ou 306 ou qualquer outra coisa que possa ser conincidência. Eu usei o NA para análise de custos de uma rede baseada em estradas e locais em um script python e estou pensando se você tentou um subconjunto menor. Eu executaria grupos de pontos muito menores na minha estação de trabalho para uma viagem de 60 minutos na minha estação de trabalho. A análise do tempo de viagem destruirá o poder de processamento.
JLP Wisc.
11
Infelizmente, também estamos enfrentando problemas de estabilidade do arcpy GP (que na verdade é apenas um invólucro COM, e parece um bug). arcpy é o único pacote de sites que conheço, que pode travar o interpretador python. O CLJ sugeriu algumas soluções alternativas aqui nas respostas (use GP de 64 bits, cursores GA do GA, etc ...), mas já recebemos respostas da ESRI que esses problemas são bugs. Esperemos que o próximo service pack traz melhoria neste
Jürgen Zornig

Respostas:

1

Se você executar o gerenciador de tarefas e observar o executável python aumentar a memória e ultrapassar 1 GB antes que ele morra, poderá se beneficiar da atualização para o geoprocessamento 10.1 de 64 bits.

Para desempenho, se você estiver usando cursores, poderá se beneficiar dos novos cursores arcpy.da. http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000008000000

Atualizei um projeto para usar o arcpy.da e foi uma melhoria de 2 magnitude.

CLJ
fonte
1

Este é simplesmente um bug do arco-íris. Você pode tentar evitar as etapas que causam a falha, mas isso geralmente acontece sob diferentes ferramentas quando usado para processar uma longa lista de dados. A única solução alternativa que encontrei é fazer com que meu script salve seu progresso ao longo do caminho para o disco. Se você reiniciar o processo, ele saberá de onde buscar. Se você desabilitar a mensagem do depurador do Windows alterando o registro (veja abaixo), poderá executar repetidamente o script em cmd.exe até que ele conclua o lote inteiro sem precisar fechar o processo manualmente todas as vezes.

Eu sei que essa é uma solução alternativa terrível, mas é bastante incomum ter uma biblioteca python matando o interpretador python.

DWORD HKLM or HKCU\Software\Microsoft\Windows\Windows Error Reporting\DontShowUI = "1"
DWORD HKLM or HKCU\Software\Microsoft\Windows\Windows Error Reporting\Disabled = "1"
Lucas Fortini
fonte
0

Você verificou como o script lida com cursores? Meus aplicativos costumam travar quando esqueço de fechá-los usando explícito del row, cursor, às vezes apenas depois de algum tempo.

Se isso não ajudar, sugiro usar uma porção menor de código e / ou dados.

Jan Šimbera
fonte