2017-09-21 4 views
2

나는 독립적으로 존재하는 두 개의 프로세스를 가지고있다. 이제는 최선의 노력으로 메시지를 하나씩 전달하고 싶습니다. 메시지를 수신하는 프로세스가 없으면 문제가되지 않지만 그렇다면 메시지를 수신해야합니다. 메시지. 메시지는 파이썬 사전입니다. 그것은 멀티 모듈처럼 나에게 보이는파이썬 2- 프로세스 IPC

내가하고 싶은 일을해야하지만, 모든 예제는 나도 찾을 수 있습니다

  • 과정을 참여 - 하나를`multiprocessing.managers.BaseManager '파생 상품에 대한 객체와 두 클라이언트.
  • 다른 프로세스를 시작하는 프로세스 중 하나를 실행하십시오.

나는 3 가지 프로세스 접근 방식을 채택 할 수 있지만 두 개의 다른 프로세스 만있을뿐 아니라 하나에서 다른 개체로 개체를 전달하려는 경우 바보처럼 보입니다. 특히 전체 시스템을 완전히 재구성하여 한 프로세스가 다른 프로세스를 시작하는 것처럼 느껴지지 않습니다.

또한 소켓을 사용할 수도 있지만 사전에 어떤 식으로 serialize하고 일련 화 된 사전이 너무 커서 한 번에 버퍼링 할 수없는 경우를 처리해야합니다. 나는 HTTP 서버를 시작하고 json-serialized 사전을 수락 할 수 있지만 이것은 어리 석다.

분명히 여기에 뭔가가 빠졌습니다. 하나의 프로세스에 서버 비트를 추가하는 쉬운 방법이 없으므로 사전을 메시지로, 클라이언트 비트를 다른 프로세스로 받아 들여 서버에 사전을 보낼 수 있습니까?

+0

프로세스가 동일한 호스트에 있습니다. – Tom

+1

한 프로세스에서 다른 프로세스로 사전을 전송할 수있는 방법은 "직렬화가 필요합니다"입니다. – jasonharper

+0

@jasonharper : 물론 가능합니다. 전혀 눈이 멀게 분명히 진술 해 주셔서 감사합니다. 제가 피하고자하는 것은 휠을 다시 발명하여 * 필자가 그것을 직렬화하는 방법을 선택해야한다는 것입니다. – Tom

답변

3

멀티 프로세싱 Listeners and Clients 클래스를 살펴볼 수 있습니다. AF_UNIX 또는 AF_PIPE 패밀리는 소켓보다 약간 가벼운 명명 된 파이프를 사용하여 구현됩니다.

그들이 반환하는 Connection 객체는 sendrecv 메서드를 통해 사전을 일련 번호로 처리하므로 걱정할 필요가 없습니다.

사전 내용이 pickled 일 수 있는지 확인하면됩니다.

+0

감사! 정확히 내가 무엇을 찾고 있었는지. – Tom