Eu tenho um script que obtém um valor do campo de um shapefile para retornar ao usuário.
Parece que somente quando o arcpy.SearchCursor é chamado ArcMap 10.0, bloqueia o arquivo e não é removido após a execução do script. Para desativar o bloqueio, preciso fechar o ArcMap. No script, excluo o objeto SearchCursor depois de usá-lo, bem como o objeto de linha.
A maneira como o script funciona é que ele tenta excluir a pasta da área de trabalho nas execuções subseqüentes, mas não pode por causa do bloqueio ... até, é claro, que eu feche o ArcMap.
Existe algum conselho para que essa trava desapareça?
fonte
row = None
após o loop simplesmente limpa a última atribuição de linha. Movê-lo para dentro do loop é uma duplicação de esforços. De qualquer forma, o coletor de lixo deve desalocar a memória, a menos que o arcpy ou o ArcMap mantenha uma referência interna aos objetos de linha.Você precisa executar seu script ArcPy de dentro do ArcMap? A menos que faça parte de uma interface ou caixa de ferramentas que você construiu, você pode executá-lo fora do ArcMap a partir de um console Python, IDLE ou Eclipse etc. (desde que você tenha uma licença apropriada na máquina em que está executando). Se for esse o caso, você pode escrever um pequeno código Python para gerar seu script ArcPy como um subprocesso, e o bloqueio deverá ser liberado quando o subprocesso for fechado.
Os bloqueios do ArcGIS são uma dor. Eu tive situações em que uma trava persiste mesmo depois de desligar a máquina, o que é uma dor monumental (geralmente se o Arc travou antes de poder arrumar as travas). Como último recurso, se isso acontecer, use o Windows Explorer para encontrar o arquivo .LOCK e exclua-o manualmente. Isso não funcionará se estiver sendo acessado pelo ArcMap ou por um processo Python, por isso é relativamente seguro ... mas essa é realmente uma placa Get-Out-of-Jail e não é uma boa prática :)
fonte
Se você estiver excluindo corretamente os objetos de linha e cursor (por exemplo
del row, rows
) e o bloqueio permanecer, é provável que o próprio ArcMap, não o arcpy, ainda esteja fazendo referência a ele.O shapefile é referenciado por uma camada no índice ou é adicionado ao sumário pela sua ferramenta de script?
Neste último caso, você pode tentar desativar "Adicionar resultados de operações de geoprocessamento à tela" em Geoprocessamento-> Opções de geoprocessamento no ArcMap.
Uma sugestão adicional: se você estiver fazendo isso como um conjunto de dados temporário / intermediário, e o número de recursos não for muito grande, tente usar a área de
in_memory
trabalho em vez de um shapefile para solucionar completamente o problema de bloqueio e obter um bom aumento potencial de desempenho também .Apenas certifique-se de excluir o espaço de trabalho in_memory ou os conjuntos de dados específicos criados por ele usando Excluir (Gerenciamento de Dados) antes de sair do script, caso contrário, ele continuará residindo na memória até que o aplicativo seja fechado.
Por fim, também observaria que o comportamento de bloqueio do shapefile mudou na 10.0 para se tornar mais rigoroso, não removendo os arquivos de bloqueio quando você remove uma camada do sumário. Consulte também este artigo e esta questão relacionada .
fonte