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

Python 从另一个应用程序内部调用金字塔框架应用程序,python,python-3.x,pyramid,wsgi,Python,Python 3.x,Pyramid,Wsgi,我有一个运行在框架中的Python应用程序,该框架驱动网络协议来控制远程设备。现在我想添加一个基于浏览器的监视和控制,我正在研究金字塔框架来构建它 通常从命令行使用pserve启动金字塔应用程序,但我找不到任何文档或示例说明如何在主机应用程序框架内调用它。这需要以金字塔码可以访问主机应用程序中的对象的方式完成 这是Pyramid的一个实际使用案例,还是我应该寻找其他基于WSGI的框架来实现这一点?WSGI应用程序基本上是一个接收一些输入并返回响应的函数,您不需要使用pserve来服务WSGI应用

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

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


这是Pyramid的一个实际使用案例,还是我应该寻找其他基于WSGI的框架来实现这一点?

WSGI应用程序基本上是一个接收一些输入并返回响应的函数,您不需要使用
pserve
来服务WSGI应用程序,它更像是一个从.ini文件组装应用程序的包装器

请看金字塔文档中的一章:

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\u forever
调用被阻塞,即程序在该行停止,直到您点击Ctrl-C并停止脚本。这使得让您的程序“驱动网络协议以控制远程设备”并同时为网页提供服务变得有点不简单(这与Node.js等其他基于事件的平台不同,在Node.js中,让两台服务器在同一进程中监听不同的端口很简单)


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

一条单独的线似乎并不难。ini文件中的所有内容都可以通过Configurator()中的函数进行控制吗?嗯,启动线程确实不难。但是,并发访问“主机应用程序对象”可能(也可能不需要)需要一些技巧。关于Configurator()vs.ini-Configurator可以配置金字塔应用程序,但是,Paste可以使用.ini文件来组装WSGI应用程序堆栈,其中一些或所有应用程序可能不是金字塔应用程序。例如,您可以同时运行金字塔应用程序、Django应用程序和Flask应用程序。