2013-02-05 7 views
1
에서 다른 프로세스의 방법은

내 설정은 다음이다 - 나는 많은 꽤 「Hello World」의 예이다 토네이도 기반의 HTTP 서버가이 설정에서 이제전화 파이썬

server = tornado.httpserver.HTTPServer(app) 
server.bind(8888) 
server.start(2) 
tornado.ioloop.IOLoop.instance().start() 

을, 나는 또한 다른 프로세스가 (프로세스를 제어 프로세스라고 부름) 루트 프로세스에 의해 생성됩니다. 따라서이 제어 프로세스는 두 개의 Tornado 처리기 프로세스의 형제입니다. 당연히 루트 프로세스에 의해 생성 된 파이프를 통해 핸들러 프로세스와 제어 프로세스간에 통신 할 수 있습니다. 그러나 나는 제어 프로세스의 방법을 호출하고 출력을 얻는 것에 더 관심이있다.

그런 일을하는 가장 좋은 방법은 무엇입니까? 처리기에서 요청을 컨트롤에 보내고 결과를 반환하기 위해 파이프를 사용하는 경우 프로세스 안전을 구현하기 위해 잠금을 사용해야합니까?

답변

0

파이프가있는 잠금 장치가 필요하지 않습니다. 파이프는 자체 동기화입니다. 또는, 다른 방법으로 넣으면 파이프의 두면이 별도의 객체입니다.

(물론 컨트롤 프로세스는 내부 이벤트 루프와 다른 스레드에서 파이프를 처리하고 메인 루프에서 실행되는 코드와 데이터를 공유해야하는 경우와 같이 내부적으로 잠금이 필요할 수 있습니다. 프로세스 간 안전과 관련이 있습니다.)

어쨌든 더 높은 수준에서 뒤로 물러나면 구현하려는 것은 RPC 메커니즘의 정확한 정의입니다. 만약 당신이하고있는 일이 충분히 간단하다면, 처음부터 새로 구현하는 것이 좋습니다. 그렇지 않다면, control에 또 다른 프로토콜을 추가하고 기존 프로토콜과 함께 관리하게 할 수 있습니다.

+0

예, 그것은 정확하게 RPC입니다. 그리고 네, 어떻게 든 혼란 스러웠습니다. 두 핸들러의 두 입력과 ​​출력이 어떻게 든 섞일 수 있습니다 (내게 수치 스럽습니다). 나는 토네이도에 대해 아주 신감이 많기 때문에 "다른 프로토콜을'control'에 추가하는 것을 의미 할 수 있겠습니까? – dmg

+0

@DJV : 네가 네가 의미하는 바가 무엇이든 네 번 네가 네 이름에 그 이름을 사용했음을 의미했다. "핸들러 프로세스"가 "제어 프로세스"에 대한 요청을하기를 원한다. 따라서 "제어 프로세스"가 이미 웹 응용 프로그램 서버 나 JSON-RPC-over-Sockets 서버 등을 구현하기 위해 Tornado를 이미 사용하고 있다면 구현 대신 다른 프로세스의 다른 프로토콜을 추가하면됩니다. 처음부터 독립적 인 무언가. – abarnert