2011-02-09 8 views
19

간단하게 한 프로세스 (Perl 스크립트, 단편)에서 다른 시스템 (Python 스크립트, 장기 실행)으로 메시지를 전달하는 방법을 찾고 있는데 두 시스템 모두 같은 시스템에 로컬로 처리합니다 . 몇 가지 연구를 해봤지만, 내가 찾은 것은 머리를 쓰거나 불필요하게 복잡해진 것처럼 보였습니다. 약간 분실되어 혼란 스러웠습니다.간단한 프로세스 간 통신

나는 다음과 같이 대략 최소한의 예를 상상 : 및/또는 곳에서 최대 읽기가 크게 감사하겠습니다 해결하는 방법에 대한

# listener.py 

class Listener: 
    def __init__(self, port) 
     self.port = port 

    def on_message(self, msg): 
     print "%s: %s" % (timestamp, msg) 

recipient = Listener(1234) 


# sender.pl 

sub send_message { 
    my ($msg, $port) = @_; 
    # ... 
} 

send_message("hello world", 1234); 

모든 포인터!

+2

왜 쉘에서 직접 사용할 수있는 OS 파이프 라인을 사용하지 않는? 'python somescript.py | 펄 otherscript.pl' 잘 작동합니다. 소켓이 없다. –

+0

POSIX-MQ 스타일 메시지를 보내거나 소켓을 사용하여 해결할 수 있습니까? – Xailor

+1

Python 스크립트는 장기 실행 프로세스이며 파이핑 메시지는 일회용으로 만 작동합니다 (기존 프로세스로 파이프 할 수는 없습니까?). 어리석은 예를 만들기 위해,'Listener'가 들어오는 메시지를 표시하는 데스크탑 위젯이라고 상상해보십시오 ('tail -f mylog'와 비슷합니다). – AnC

답변

3

일반적으로 소켓에 관심이 있습니다. 필요한 정보를 얻을 수있는 좋은 곳은 이상의 문서입니다. perl의 기본 소켓 물건들입니다. perldoc perlipc

+0

잠시 동안 저는 소켓으로 갈 것입니다. 주로 간결한 튜토리얼을 발견했기 때문에 : http://www.doughellmann.com/PyMOTW/socket/tcp.html 이 주제에 관해 계속 읽도록하겠습니다. 그러나, 배워야 할 것이 많이있는 것처럼 보입니다. – AnC

20

프로세스 간 통신은 직접적으로 진행되지만 사실은 복잡합니다. 단순한 답변의 관점에서 당신이 여기에 무엇을 말하든, 항상 언급되지 않은 많은 경고가 있음을 명심하십시오.

그런 면책 조항이있는 지금, 나는 당신이 원하는 것은 메시지 대기열이라고 주장합니다. 이는 예제 api에 IP 주소를 포함시키지 않았다는 사실에 근거합니다. 기계를 거쳐야하는 경우 소켓이 필요합니다. 그러나 이것은 동일한 시스템의 프로세스와 통신하기위한 것이라는 사실을 처리 할 수 ​​있다면 이해하기 쉬운 메시지 큐를 찾을 수있을 것입니다. 펄에 대한

좋은 출발점입니다
파이썬 http://perldoc.perl.org/IPC/Msg.html

, 이것은 (세마포어 같은 IPC의 다른 종류의 무시) 설명하는 것 같다
http://semanchuk.com/philip/sysv_ipc/

+0

Python 링크에서 인용 : _ 이것은 파이썬이 System V 프로세스 간 세마포어, 공유 메모리 및 메시지 큐를 대부분의 (모든?) *** nix flavors **에 액세스 할 수있게 해주는 sysv_ipc 모듈을 설명합니다. 예를 들면 OS X, Linux, FreeBSD, OpenSolaris 2008.11 및 AIX (아마)가 있습니다. Cygwin과 같은 라이브러리를 사용하여 Windows에서도 작동 할 수 있습니다 ._ – ChaimG

10

을 그리고 파워 업 통신 소켓과 같은 스타일로 0MQ를 살펴보십시오. 두 가지 앱이있는 위치에 따라 다양한 통신 기술을 사용할 수 있으며 로컬 프로세스의 경우에도 사용하기가 매우 쉽고 문제를 해결할 수 있습니다.

http://zeromq.org