<\/HEAD>
O Problema<\/STRONG><\/SPAN><\/P>Qualquer pessoa que já precisou fazer algum tipo de script com arcpy envolvendo tarefas complexas e repetitivas sabe o quanto pode demorar para ser concluído. Mesmo algo tão simples como exportar alguns milhares de documentos de mapa para imagens pode potencialmente levar horas para rodar. Parte da razão para isso é devido ao fato de que o python, por padrão, roda em uma única thread. Um programador familiarizado com outras linguagens, como Java ou C++ pode ter a ideia brilhante de resolver essa ineficiência usando multithreading para compartilhar o trabalho entre todos os CPUs. Infelizmente, multithreading em python não funciona exatamente da mesma forma.<\/P><\/P>CPython, sobre o qual arcpy é construído, emprega o que é conhecido como Global Interpreter Lock (GIL) para impedir que uma thread modifique um objeto enquanto outra thread está trabalhando com esse objeto, mantendo a coleta de lixo funcionando suavemente. No entanto, a desvantagem disso é que scripts python com multithreading não podem aproveitar totalmente todos os CPUs disponíveis, impedindo qualquer ganho real de velocidade.<\/P><\/P>A Solução<\/STRONG><\/SPAN><\/P>Entra o módulo multiprocessing. Este módulo emprega processos em vez de threads, contornando assim o GIL. Devido a isso, os programadores podem aproveitar totalmente múltiplos processadores em qualquer máquina dada, e mesmo que processos tenham maior overhead do que threads, ganhos significativos de velocidade podem ser alcançados.<\/P><\/P>Esta apresentação mostrará as melhores práticas para usar o módulo multiprocessing com arcpy, e mostrará exemplos de como estamos atualmente usando multithreading para fornecer soluções aos clientes.<\/P><\/P>Coautores:<\/P>Brett Gaines<\/A>Kelvin Fox<\/A><\/SPAN><\/P><\/BODY><\/HTML>