class_docstr: Produce data from ZMQ PULL socket(s).
  It is the receiver-side counterpart of :func:`send_dataflow_zmq`, which uses :mod:`tensorpack.utils.serialize`
  for serialization.
  See http://tensorpack.readthedocs.io/tutorial/efficient-dataflow.html#distributed-dataflow
  
  Attributes:
      cnt1, cnt2 (int): number of data points received from addr1 and addr2
class_docstr_tok: ["Produce","data","from","ZMQ","PULL","socket","(","s",")",".","It","is","the","receiver-side","counterpart","of",":","func",":","`","send_dataflow_zmq","`",",","which","uses",":","mod",":","`","tensorpack.utils.serialize","`","for","serialization",".","See","http",":","\/\/tensorpack.readthedocs.io\/tutorial\/efficient-dataflow.html","#","distributed-dataflow","Attributes",":","cnt1",",","cnt2","(","int",")",":","number","of","data","points","received","from","addr1","and","addr2"]
docstr: Args:
      addr1,addr2 (str): addr of the zmq endpoint to connect to.
          Use both if you need two protocols (e.g. both IPC and TCP).
          I don't think you'll ever need 3.
      hwm (int): ZMQ high-water mark (buffer size)
      bind (bool): whether to connect or bind the endpoint
docstr_tok: ["Args",":","addr1",",","addr2","(","str",")",":","addr","of","the","zmq","endpoint","to","connect","to",".","Use","both","if","you","need","two","protocols","(","e.g",".","both","IPC","and","TCP",")",".","I","do","n't","think","you","'ll","ever","need","3.","hwm","(","int",")",":","ZMQ","high-water","mark","(","buffer","size",")","bind","(","bool",")",":","whether","to","connect","or","bind","the","endpoint"]
code: def __init__(self, addr1, addr2=None, hwm=50, bind=True):
      """
      Args:
          addr1,addr2 (str): addr of the zmq endpoint to connect to.
              Use both if you need two protocols (e.g. both IPC and TCP).
              I don't think you'll ever need 3.
          hwm (int): ZMQ high-water mark (buffer size)
          bind (bool): whether to connect or bind the endpoint
      """
      assert addr1
      self._addr1 = addr1
      self._addr2 = addr2
      self._hwm = int(hwm)
      self._guard = DataFlowReentrantGuard()
      self._bind = bind
  
file_path: tensorpack/tensorpack/dataflow/remote.py
imports: import multiprocessing
  import time
  from collections import deque
  import tqdm
  from ..utils import logger
  from ..utils.concurrency import DIE
  from ..utils.serialize import dumps, loads
  from ..utils.utils import get_tqdm_kwargs
  from .base import DataFlow, DataFlowReentrantGuard
label_desc: Use image node_id 1 to create a new RemoteDataZMQ object from inherited base classes: DataFlow with example: obj = RemoteDataZMQ(addr1, addr2, hwm, bind)