text: """
  Used for stressing Latch.get/put. Swap the number of producer/consumer threads
  below to try both -- there are many conditions in the Latch code that require
  testing of both.
  """
  
  import logging
  import random
  import threading
  import time
  import mitogen.core
  import mitogen.utils
  
  mitogen.utils.log_to_file()
  mitogen.core.IOLOG.setLevel(logging.DEBUG)
  mitogen.core._v = True
  mitogen.core._vv = True
  
  l = mitogen.core.Latch()
  consumed = 0
  produced = 0
  crash = 0
  
  def cons():
      global consumed, crash
      try:
          while 1:
              g = l.get()
              print 'got=%s consumed=%s produced=%s crash=%s' % (g, consumed, produced, crash)
              consumed += 1
              time.sleep(g)
              for x in xrange(int(g * 1000)):
                  pass
      except:
          crash += 1
  
  def prod():
      global produced
      while 1:
          l.put(random.random()/10)
          produced += 1
          time.sleep(random.random()/10)
  
  allc = [threading.Thread(target=cons) for x in range(64)]
  allp = [threading.Thread(target=prod) for x in range(8)]
  for th in allc+allp:
      th.setDaemon(True)
      th.start()
  
  raw_input()
  exit()
  