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:
- Para um determinado ponto, calcule a distância de custo (usando gp.CostDistance_sa) com um corte de 60 minutos de tempo de viagem.
- 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.
- 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.
Respostas:
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.
fonte
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.
fonte
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.
fonte