2016-08-01 5 views
1

원격 장치를 제어하기 위해 네트워크 프로토콜을 구동하는 프레임 워크에서 실행되는 Python 응용 프로그램이 있습니다. 이제 브라우저 기반 모니터링 및 제어 기능을 추가하고 Pyramid 프레임 워크를 살펴보고자합니다.다른 응용 프로그램 내부에서 피라미드 프레임 워크 응용 프로그램 호출

일반적으로 명령 줄에서 pserve을 사용하여 피라미드 응용 프로그램을 시작하지만 호스트 응용 프로그램 프레임 워크에서 호출하는 방법에 대한 설명서 나 예제를 찾을 수 없습니다. 이 작업은 피라미드 코드가 호스트 응용 프로그램의 객체에 액세스 할 수있는 방식으로 수행되어야합니다.

이 기능은 Pyramid의 유용한 활용 사례입니까, 아니면이를 수행하기위한 다른 WSGI 기반 프레임 워크를 찾아야합니까?

답변

1

WSGI 앱은 기본적으로 일부 입력을 수신하고 응답을 반환하는 기능이며, WSGI 앱을 제공하는 데 실제로 pserve이 필요하지 않습니다. 이는 .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 - 을 입력하고 스크립트를 중지 할 때까지 프로그램이 해당 줄에서 중지됩니다. 이렇게하면 "원격 장치를 제어하는 ​​네트워크 프로토콜을 구동"하고 동시에 웹 페이지를 제공하는 프로그램을 만드는 것이 중요하지 않습니다 (Node.js와 같은 다른 이벤트 기반 플랫폼과는 달리). 동일한 프로세스 내의 다른 포트에서 수신 대기하는 두 개의 서버가 있음).

이 문제에 대한 가능한 해결책 중 하나는 별도의 스레드에서 웹 서버를 실행하는 것입니다.

+0

별도의 스레드가 어려운 것처럼 보입니다. ini 파일의 모든 것이 Configurator()의 기능을 통해 제어 될 수 있습니까? – AlanObject

+1

글쎄, 스레드를 시작하는 것은 실제로 어렵지 않습니다. "호스트 응용 프로그램 개체"에 대한 동시 액세스는 일부 트릭이 필요할 수도 있습니다. – Sergey

+1

Configurator()와 관련하여 .ini - 구성자는 Pyramid 앱 *을 구성 할 수있는 모든 것을 가지고 있지만 Paste는 .ini 파일을 사용하여 피라미드 앱이 아닐 수도있는 WSGI 앱 스택을 어셈블 할 수 있습니다. Pyramid 앱, Django 앱 및 Flask 앱을 ​​함께 실행할 수 있습니다. – Sergey

관련 문제