Pergunta

Eu tenho um aplicativo Pilões onde eu gostaria de passar um pouco da lógica para um processo em lote separado. Fui correndo-lo sob o aplicativo principal para testar, mas ele vai estar fazendo um monte de trabalho no banco de dados, e eu gostaria que ele seja um processo separado que será executado em segundo plano constantemente. O aplicativo principais pilares irão enviar trabalhos para o banco de dados e o novo processo vai fazer o trabalho solicitado em cada trabalho.

Como posso lançar um controlador como um só roteiro estande?

Eu tenho atualmente:

from warehouse2.controllers import importServer
importServer.runServer(60)

e no arquivo do controlador, mas não faz parte da classe do controlador:

def runServer(sleep_secs):
    try:
        imp = ImportserverController()
        while(True):
            imp.runImport()
            sleepFor(sleep_secs)

    except Exception, e:
        log.info("Unexpected error: %s" % sys.exc_info()[0])
        log.info(e)

Mas a partir ImportServer.py nos resultados de linha de comando em:

2008-09-25 12:31:12.687000 Could not locate a bind configured on mapper Mapper|I
mportJob|n_imports, SQL expression or this Session
Foi útil?

Solução

Estou redacting a minha resposta e upvoting a outra resposta por Ben Bangert, como é o correto. Eu respondi e, desde então, aprendeu a maneira correta (mencionado abaixo). Se você realmente quiser, confira a história desta resposta para ver o errado (mas de trabalho) solução que originalmente proposto.

Outras dicas

Se você quiser partes de carga de um aplicativo de Pilões, tais como os modelos de Pilões fora, carregar o aplicativo Pilões no script em primeiro lugar:

from paste.deploy import appconfig
from pylons import config

from YOURPROJ.config.environment import load_environment

conf = appconfig('config:development.ini', relative_to='.')
load_environment(conf.global_conf, conf.local_conf)

Isso irá carregar o aplicativo Pilares, que define a maior parte do Estado, de modo que você pode continuar a usar os modelos SQLAlchemy e sessão de trabalho com o banco de dados.

Note que, se o código está usando os globals postes, como pedido / resposta / etc, então, que não vai funcionar uma vez que exigem um pedido para estar em andamento de existir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top