从另一个应用程序内部调用金字塔框架应用程序

时间:2016-08-01 09:30:04

标签: python python-3.x pyramid wsgi

我有一个在框架中运行的Python应用程序,该框架驱动网络协议来控制远程设备。现在我想添加一个基于浏览器的监视和控制,我正在查看Pyramid框架来构建它。

通常从命令行使用 pserve 启动Pyramid应用程序,但是我找不到任何有关如何在宿主应用程序框架内调用它的文档或示例。这需要以金字塔代码可以访问主机应用程序中的对象的方式完成。

这是Pyramid的实际用例还是我应该寻找其他基于WSGI的框架来做到这一点?

1 个答案:

答案 0 :(得分:1)

WSGI应用程序基本上是一个接收一些输入并返回响应的函数,你真的不需要pserve来提供WSGI应用程序,它更像是一个组装一个包装器的包装器来自.ini文件的应用程序。

查看Pyramid文档中的Creating Your First Pyramid Application章节:

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response

def hello_world(request):
    return Response('Hello %(name)s!' % request.matchdict)

if __name__ == '__main__':
    config = Configurator()
    config.add_route('hello', '/hello/{name}')
    config.add_view(hello_world, route_name='hello')
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 8080, app)
    server.serve_forever()

最后两行创建一个侦听端口8080的服务器。

现在,棘手的问题是serve_forever调用是阻塞,程序在该行停止,直到你点击 Ctrl - C 并停止脚本。这使得您的程序能够“驱动网络协议来控制远程设备”并且这样做有点不重要。并且同时提供网页(这与其他基于事件的平台不同,例如Node.js,在同一个过程中有两个服务器可以监听不同的端口)。

此问题的一种可能解决方案是在单独的线程中运行Web服务器。