2017-10-12 25 views
0

multiprocessing.Process 내부에 메시지를 수신하지 :PUB/SUB 모델 나는 <strong><code>multiprocessing.Process</code></strong>의 영역 내부의 pyzmq에게 <strong><code>PUB/SUB</code></strong> 소켓 원형을 사용하기 위해 노력하고있어

나는 하나 명의 가입자를 가지고 :

import time 
import collections  
import zmq 

context = zmq.Context() 
socket = context.socket(zmq.SUB) 
socket.setsockopt(zmq.SUBSCRIBE, b"") 
socket.connect("tcp://localhost:5000") 

nb_recv = 0 
begin = time.time() 
counter = collections.defaultdict(int) 
while True: 
    msg = socket.recv_json() 
    print(msg) 

게시자의 두 가지 구현입니다. 이 하나

가입자 메시지를 수신한다 :

import zmq 
from multiprocessing import Process 

class Sender(object): 

    def __init__(self): 
     self._context = zmq.Context() 
     pass 

    def run(self): 
     self._socket = self._context.socket(zmq.PUB) 
     self._socket.bind("tcp://127.0.0.1:5000") 
     seq_num = 0 
     while True: 
      msg = { "sequence": seq_num } 
      self._socket.send_json(msg) 
      seq_num += 1 

if __name__ == "__main__": 
    s = Sender() 
    p = Process(target=s.run) 
    p.start() 
    p.join() 

하지만 유일한 차이 대신에있는 중, socket 생성 생성자로되어있다 이와 (와

import zmq 
from multiprocessing import Process 

class Sender(object): 

    def __init__(self): 
     self._context = zmq.Context() 
     self._socket = self._context.socket(zmq.PUB) # <--------- 
     pass 

    def run(self): 
     self._socket.bind("tcp://127.0.0.1:5000") 
     seq_num = 0 
     while True: 
      msg = { "sequence": seq_num } 
      self._socket.send_json(msg) 
      seq_num += 1 

if __name__ == "__main__": 
    s = Sender() 
    p = Process(target=s.run) 
    p.start() 
    p.join() 
다음 run() 클래스 방법), 가입자 에게 어떤 메시지를 수신하지 않습니다

multiprocessing.Processthreading.Thread으로 바꿀 때 두 클래스 모두 잘 작동하지만 설명서에 대한 설명을 찾지 못했습니다.

답변

0

하나의 프로세스에서 개체를 만들고 다른 개체에서 메서드를 실행하려고합니다. 그것은

create 가능한 또는 multiprocessing.Manager은 있지만 multiprocessing 프로세스 사이에도 share 객체이다이 객체가 아닌 공유 자원 (네트워크 소켓)를 보유하고 있기 때문에, 당신은 당신이 원하는 않는 작업자 프로세스 내부를 만드는 것이 더 낫다 피클 링 지뢰밭을 걷고 피클 할 수없는 들판을 가진 물체를 사용하는 것.