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"]
code: def bind_or_connect(self, socket, addr):
      if self._bind:
          socket.bind(addr)
      else:
          socket.connect(addr)
  
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 3 for calling the RemoteDataZMQ obj's underlying member method code with example usage: obj.bind_or_connect(socket, addr) without return types