2016-08-01 102 views
1

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

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

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

回答

1

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

有金字塔文档看看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服务器。

+0

一个单独的线程似乎并不困难。 ini文件中的所有东西都可以通过Configurator()中的函数进行控制? – AlanObject

+1

那么,开始一个线程确实不难。并发访问您的“主机应用程序对象”可能(或可能不)需要一些技巧。 – Sergey

+1

关于配置器()vs .ini - 配置器有任何配置*金字塔应用*的东西,但是,粘贴可以使用.ini文件来组装一堆WSGI应用程序,部分或全部应用程序可能不是金字塔应用程序。例如,您可以有金字塔应用程序,Django应用程序和Flask应用程序一起运行。 – Sergey

相关问题