Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 作为单独的应用程序运行挂架控制器?_Python_Pylons - Fatal编程技术网

Python 作为单独的应用程序运行挂架控制器?

Python 作为单独的应用程序运行挂架控制器?,python,pylons,Python,Pylons,我有一个Pylons应用程序,我想把一些逻辑转移到一个单独的批处理过程中。我一直在主应用程序下运行它进行测试,但它将在数据库中进行大量工作,我希望它是一个单独的进程,将在后台不断运行。主挂架应用程序将把作业提交到数据库中,新进程将完成每个作业中请求的工作 如何将控制器作为独立脚本启动 我目前有: from warehouse2.controllers import importServer importServer.runServer(60) 在控制器文件中,但不是控制器类的一部分: def

我有一个Pylons应用程序,我想把一些逻辑转移到一个单独的批处理过程中。我一直在主应用程序下运行它进行测试,但它将在数据库中进行大量工作,我希望它是一个单独的进程,将在后台不断运行。主挂架应用程序将把作业提交到数据库中,新进程将完成每个作业中请求的工作

如何将控制器作为独立脚本启动

我目前有:

from warehouse2.controllers import importServer
importServer.runServer(60)
在控制器文件中,但不是控制器类的一部分:

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)
但在命令行上启动ImportServer.py会导致:

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

我正在修改我的回答,并对本·班格特的另一个答案进行投票,因为它是正确的。我回答了这个问题,并且学会了正确的方法(如下所述)。如果您真的想加载,请查看此答案的历史记录,查看我最初提出的错误(但有效)解决方案。

如果您想加载某个挂架应用程序的部分,例如来自外部挂架的模型,请先在脚本中加载挂架应用程序:

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)
这将加载Pylons应用程序,该应用程序将设置大部分状态,以便您可以继续使用SQLAlchemy模型和会话来处理数据库


请注意,如果您的代码使用的是“请求/响应”等pylons全局变量,那么这将不起作用,因为它们要求存在一个正在进行的请求。

为什么这必须是一个“pylons控制器”而不是一个普通脚本?您能更新所选的答案吗?另一个答案是正确的解决方案。是的,我不知道如何加载paster所做的所有工作。您的解决方案很好地避开了这一点。谢谢。我害怕用脚本粘贴外壳。交互式Python shell有不同的规则,例如终止多行语句。当涉及到像塔架一样思考时,他是权威的资源,自从我回答了这个问题,我就知道如何正确地做同样的事情。