2013-03-22 3 views
0

파이썬 스크립트 A와 파이썬 스크립트 B가 있습니다.다른 작업을하는 동안 파이썬을 통해 메시지를받습니다.

둘 다 독립적으로 실행됩니다. 스크립트 B의 실행이 끝나면 스크립트 A에 "B 완료"메시지를 보내야합니다.

간단한 메시지는 sockets et al. 그러나 스크립트 A는 자체적으로 몇 가지 작업을 수행하고 있습니다. A가 A의 실행을 중단하지 않고 B를 듣게하려면 어떻게해야합니까?

도움을 주시면 감사하겠습니다.

편집 :

B는 전적으로 CPU 바운드 - 계산입니다. A는 I/O Y 인드와 CPU Y 인딩의 혼합입니다. 사용자는 I/O가 명백하게 키 스트로크 인 입력 (입력과 같은 키로거)과 불규칙한 간격으로 개입하고 있으며, CPU 바운드 작업은 입력 된 키에 대해 수행되는 계산입니다.

+0

그들은 어떤 작업을하고 있습니까? CPU 또는 IO 바인딩? 셋업의 큰 그림은 무엇입니까? – baloo

+0

질문 업데이트! –

답변

1

이 문제 영역에는 여러 가지 해결책이 있습니다.

체크 아웃 ZMQ을 사용하면 응용 프로그램간에 메시징 패턴을 쉽게 만들 수 있습니다.

메시지 채널은 자신의 스레드에서 실행되며 gevent과 함께 사용되는 경우 불필요한 오버 헤드를 피하기 위해 "녹색"스레드 일 수 있습니다. gevent 및 zmq을 결합

몇 가지 예 : https://github.com/zeromq/pyzmq/tree/master/examples/gevent
다른 메시징 패턴에 대한 좋은 가이드 : ZMQ Guide

결과를 다시보고 새로운 작업에 지속적으로 여론 조사와 A와 B 사이의 채널을 만들려면 다음 라이브러리를 사용하여 .

브로커가 A와 B 사이에있는 다른 솔루션이 있지만 노드 간 링크를 직접 설정하면 설명하는 것과 같은 대화 형 ish 응용 프로그램에 더 적합합니다.

+0

감사합니다. 좋은 해결책 인 것 같아. 나는 더 쉬운 해결책이 내일까지 오지 않으면 받아 들일 것이다. :) –

+0

이것은 쉬운 해결책이다;) – baloo

+0

ZMQ + gevent는이 요구 사항을 다루는 나의 goto 방법이 될 것이다. 당신은 gevent를 생략하고 일반적인 파이썬 쓰레드를 사용할 수 있지만 프로세스 A가 CPU 바운드이면 아무런 이득이없는 스레드에서 컨텍스트 스위칭을 많이하게 될 것입니다. I/O가 바인드 된 경우 Python 스레드가 적합합니다. – sberry

관련 문제