Iniciar Repl/CLI em segundo plano e comandos de feed

Iniciar Repl/CLI em segundo plano e comandos de feed

Digamos que o pythonrepl demore muito para iniciar. Existe uma maneira de iniciá-lo em segundo plano para que eu possa criar um alias e alimentá-lo com comandos como python-current "command to run".

Responder1

Não há nada na distribuição python que faça esse tipo de abertura, apesar das 'baterias incluídas'.

Que programas como editores podem lidar com esse tipo de coisa, é porque é bastante claro o que fazer quando você abre outro arquivo: basta abrir uma janela/aba no novo arquivo, manipulado pelo mesmo executável.

Implementar algo assim sozinho não é tão difícil, mas você tem que pensar no que acontece quando o primeiro comando ainda não terminou e o segundo está agendado:

  • abortar o primeiro comando
  • enfileirar o segundo comando
  • execute coisas em paralelo (o que requer tempo extra de inicialização, a menos que você tenha vários threads aguardando comando)

Notifiquei pythons em execução para carregar e executar módulos com base em arquivos em um diretório que foi verificado, solicitação http (em um sistema baseado em twist) e com zeromq. O que é apropriado depende, IMHO, do que mais é necessário para o sistema, eu sempre escolho aquilo que funciona e tem menos sobrecarga. Você python-currentteria que fazer a interface adequada.

Freqüentemente, isso era combinado com o recarregamento de determinados módulos (para obter o processamento de novos comandos). Para isso você pode usar o reload()integrado:

import mycommand
# test for a command that requires reloading
reload(mycommand)


Como um aparte: especialmente ao usar o código da UI, achei esta recarga útil. O carregamento do executável em Python é comparável ao Perl (0,002s em meu sistema antigo time python -v). Carregar os módulos básicos leva cerca de dez vezes mais tempo ( time python -c "exit();", 0.025s). But when using UI based programs the whole startup easily grows to several seconds and more. And in that case implementing dynamic command reading and having apython-current` faz sentido.

Responder2

Se você usar bashvocê pode tentarcoprocessos. Ksh também temcoprocessos, não tenho certeza se ambos os shells têm funções equivalentes nesta área. Eu apenas tentei a versão Ksh (meu empregador adora klunk, então usamos Ksh) e funcionou, mas não foi fácil ter mais de um único coprocesso.

Procure no Google por "exemplo de coprocessamento ksh" ou "exemplo de coprocessamento bash" e você encontrará um código de exemplo. Trabalhe a partir dos exemplos, pois a coisa toda não é muito intuitiva.

informação relacionada