Pregunta

Tengo una aplicación Pylons donde me gustaría mover parte de la lógica a un proceso por lotes separado. Lo he estado ejecutando bajo la aplicación principal para la prueba, pero va a hacer mucho trabajo en la base de datos, y me gustaría que fuera un proceso separado que se ejecutará en segundo plano constantemente. La aplicación de pilones principales enviará trabajos a la base de datos, y el nuevo proceso hará el trabajo solicitado en cada trabajo.

¿Cómo puedo iniciar un controlador como una secuencia de comandos independiente?

Actualmente tengo:

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

y en el archivo del controlador, pero no es parte de la clase del 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)

Pero al iniciar ImportServer.py en los resultados de la línea de comandos:

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
¿Fue útil?

Solución

Estoy redactando mi respuesta y votando la otra respuesta de Ben Bangert, ya que es la correcta. Respondí y desde entonces he aprendido de la manera correcta (mencionada a continuación). Si realmente desea, consulte el historial de esta respuesta para ver la solución incorrecta (pero que funciona) que propuse originalmente.

Otros consejos

Si desea cargar partes de una aplicación de pilones, como los modelos de fuera de los pilones, primero cargue la aplicación de pilones en el script:

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)

Eso cargará la aplicación Pylons, que configura la mayor parte del estado para que puedas utilizar los modelos SQLAlchemy y Session para trabajar con la base de datos.

Tenga en cuenta que si su código está utilizando los indicadores globales de los pilones, como request / response / etc, no funcionará, ya que requieren que exista una solicitud en curso para existir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top