Estou codificando com Python há vários meses e desenvolvi alguns scripts razoavelmente complexos para tarefas principalmente de geoprocessamento. Dito isto, ainda estou aprendendo muito, pois venho de um background SQL / VBA / VBScript.
Eu sei que o código compilado normalmente é executado mais rapidamente do que o código que deve ser processado por um intérprete de linguagem, por isso estou interessado na possibilidade de compilar um script Python de geoprocessamento em um arquivo .EXE para trabalhar com big data.
Isso é possível? Se for, qual é a melhor maneira de compilar um script Python (.py) que esteja importando os módulos arcgisscripting ou arcpy?
Passei alguns minutos tentando encontrar o que quero fazer e a pesquisa retornou este artigo, entre outros: http://www.ehow.com/how_2091641_compile-python-code.html
O compilador parecia funcionar, mas, ao executar o arquivo .exe resultante, ocorreu um erro enigmático dizendo que alguns arquivos estavam indisponíveis.
O script Python executa o que parece razoavelmente bem a partir da linha de comando, mas estou me perguntando se eu poderia ver alguma leve melhora se fosse capaz de compilar o arquivo .py. Mais uma vez, estou trabalhando com alguns grandes conjuntos de dados que levam mais de 20 horas para serem processados (delineando as bacias hidrográficas dos locais de amostra de qualidade da água). Vou levar tudo o que puder para melhorar.
O script foi executado 10% mais rápido fora do ArcGIS a partir da linha de comando, usando um conjunto de sites de teste versus a configuração do script como uma ferramenta de script em uma nova caixa de ferramentas no ArcCatalog. Eu tenho executado o script a partir da linha de comando sem qualquer instância do ArcGIS aberta em uma máquina dedicada.
Portanto, é possível compilar scripts Python que importam o módulo arcgisscripting e chamam as ferramentas ArcToolBox?
EDITAR
Obrigado pela contribuição, isso é útil para mim. O script é amplamente uma maneira de coordenar várias ferramentas do ArcGIS e gerar os formatos / locais desejados / com a atribuição apropriada. Acho que já reduzi um pouco de gordura, escrevendo em uma pasta de rascunho em vez de um geodatabase pessoal de rascunho para alguns arquivos raster temporários, para que eles possam ser armazenados no formato ESRI GRID versus no formato IMG. Vou verificar as sugestões do criador de perfil.
Há alguns no meu escritório que questionam o Python dizendo "que o código compilado é muito mais rápido que o código executado através de um intérprete", principalmente em comparação com, digamos, um programa Visual Basic ou VB.NET compilado, mas esse é um bom ponto as ferramentas vão levar tempo de qualquer maneira. E, parece que nas máquinas de computação atuais que interpretam código pode não ser muito mais lento que o código compilado para garantir que se esforce mais.
EDIT - atualização sobre otimização do programa com formatos raster.
Queria acompanhar a minha "otimização" deste programa Python, e pude economizar 2 horas de tempo de processamento escrevendo rasters provisórios no formato GRID em vez de em um geodatabase pessoal. Não apenas isso, houve uma redução significativa no consumo de espaço em disco no tamanho dos dados. A execução original que escrevi para todos os rasters (e eles eram apenas recursos pontuais convertidos em rasters e depois rasters de bacias hidrográficas) resultou em 37,1 GB de dados apenas para esses arquivos. A gravação das duas últimas saídas de dados em uma pasta no formato GRID foi reduzida para 667 MB de dados.
Eu ficaria curioso para ver como um arquivo GDB lidaria com esses dados, principalmente devido ao tamanho dos dados. Mas reduzir meu tempo de processamento de 9,5 para 7,5 horas certamente é suficiente para advogar por lidar com rasters fora dos bancos de dados geográficos no formato GRID.