class_docstr: PyZMQ Garbage Collector
  
  Used for representing the reference held by libzmq during zero-copy sends.
  This object holds a dictionary, keyed by Python id,
  of the Python objects whose memory are currently in use by zeromq.
  
  When zeromq is done with the memory, it sends a message on an inproc PUSH socket
  containing the packed size_t (32 or 64-bit unsigned int),
  which is the key in the dict.
  When the PULL socket in the gc thread receives that message,
  the reference is popped from the dict,
  and any tracker events that should be signaled fire.
class_docstr_tok: ["PyZMQ","Garbage","Collector","Used","for","representing","the","reference","held","by","libzmq","during","zero-copy","sends",".","This","object","holds","a","dictionary",",","keyed","by","Python","id",",","of","the","Python","objects","whose","memory","are","currently","in","use","by","zeromq",".","When","zeromq","is","done","with","the","memory",",","it","sends","a","message","on","an","inproc","PUSH","socket","containing","the","packed","size_t","(","32","or","64-bit","unsigned","int",")",",","which","is","the","key","in","the","dict",".","When","the","PULL","socket","in","the","gc","thread","receives","that","message",",","the","reference","is","popped","from","the","dict",",","and","any","tracker","events","that","should","be","signaled","fire","."]
code: def __init__(self, context=None):
      super().__init__()
      self.refs = {}
      self.pid = None
      self.thread = None
      self._context = context
      self._lock = Lock()
      self._stay_down = False
      self._push = None
      self._push_mutex = None
      atexit.register(self._atexit)
  
imports: import atexit
  import struct
  import warnings
  from collections import namedtuple
  from os import getpid
  from threading import Event, Lock, Thread
  import zmq
label_desc: Use image node_id 1 to create a new GarbageCollector object  with example: obj = GarbageCollector(context)