
Notei várias vezes que um script python simples (com alguns cálculos algébricos diretos em um loop) é executado consideravelmente mais rápido (até um fator 6) quando iniciado em uma linha de comando do shell, em comparação com uma execução por meio do shell do IDLE. Não há nada sofisticado acontecendo no roteiro. Imprimo apenas uma variável de loop para acompanhar visualmente o progresso no loop.
Certamente apenas esta declaração de impressão não pode ser o motivo da perda de velocidade no IDLE, ou pode?
Alguém pode me explicar por que isso acontece?
Responder1
Sim, a instrução print é realmente a principal causa da lentidão no modo inativo. Os fluxos stdout e stderr são capturados pelo IDLE e vários comandos Tk são executados para renderizar o texto adequadamente. Remover sua saída para stdout deve acelerar as coisas novamente.
Veja oociosolib.PyShell,ociosolib.OutputWindow, eidlelib.EditorWindowmódulos para (alguns) da extensão da toca do coelho...
Eu sugeriria usar oexploração madeireiramódulo para registrar o progresso; você pode então definir o nível de log para algo mais alto ao executar em IDLE para evitar a saída nessa condição ou registrar em algum lugar diferente de stdout.
embora eurealmentenão recomendaria, algo como o seguinte provavelmente funcionamaioriana maior parte do tempo se você realmente deseja configurar o comportamento de maneira diferente ao executar em IDLE. Embora você realmente não devesse :-)
import sys
running_under_idle = 'idlelib' in sys.modules