class_docstr: MessageTracker(*towatch)
  
  A class for tracking if 0MQ is done using one or more messages.
  
  When you send a 0MQ message, it is not sent immediately. The 0MQ IO thread
  sends the message at some later time. Often you want to know when 0MQ has
  actually sent the message though. This is complicated by the fact that
  a single 0MQ message can be sent multiple times using different sockets.
  This class allows you to track all of the 0MQ usages of a message.
  
  Parameters
  ----------
  towatch : Event, MessageTracker, Message instances.
      This objects to track. This class can track the low-level
      Events used by the Message class, other MessageTrackers or
      actual Messages.
docstr: MessageTracker(*towatch)
  
  Create a message tracker to track a set of mesages.
  
  Parameters
  ----------
  *towatch : tuple of Event, MessageTracker, Message instances.
      This list of objects to track. This class can track the low-level
      Events used by the Message class, other MessageTrackers or 
      actual Messages.
docstr_tok: ["MessageTracker","(","*","towatch",")","Create","a","message","tracker","to","track","a","set","of","mesages",".","Parameters","--","--","--","--","--","*","towatch",":","tuple","of","Event",",","MessageTracker",",","Message","instances",".","This","list","of","objects","to","track",".","This","class","can","track","the","low-level","Events","used","by","the","Message","class",",","other","MessageTrackers","or","actual","Messages","."]
code: def __init__(self, *towatch):
      """MessageTracker(*towatch)
  
      Create a message tracker to track a set of mesages.
  
      Parameters
      ----------
      *towatch : tuple of Event, MessageTracker, Message instances.
          This list of objects to track. This class can track the low-level
          Events used by the Message class, other MessageTrackers or
          actual Messages.
      """
      self.events = set()
      self.peers = set()
      for obj in towatch:
          if isinstance(obj, Event):
              self.events.add(obj)
          elif isinstance(obj, MessageTracker):
              self.peers.add(obj)
          elif isinstance(obj, Frame):
              if not obj.tracker:
                  raise ValueError("Not a tracked message")
              self.peers.add(obj.tracker)
          else:
              raise TypeError(
                  "Require Events or Message Frames, not %s" % type(obj)
              )
  
imports: import time
  from zmq.error import NotDone
  from zmq.backend import Frame
label_desc: Use image node_id 1 to create a new MessageTracker object from inherited base classes: object with example: obj = MessageTracker()