text: #!/usr/bin/env python
  
  import mpi4pyve
  mpi4pyve.rc.threads = True
  mpi4pyve.rc.thread_level = "funneled"
  mpi4pyve.profile('vt-hyb', logfile='threads')
  
  from mpi4pyve import MPI
  from threading import Thread
  
  MPI.COMM_WORLD.Barrier()
  
  # Understanding the Python GIL
  # David Beazley, http://www.dabeaz.com
  # PyCon 2010, Atlanta, Georgia
  # http://www.dabeaz.com/python/UnderstandingGIL.pdf
  
  # Consider this trivial CPU-bound function
  def countdown(n):
      while n > 0:
          n -= 1
  
  # Run it once with a lot of work
  COUNT = 10000000 # 10 millon
  tic = MPI.Wtime()
  countdown(COUNT)
  toc = MPI.Wtime()
  print ("sequential: %f seconds" % (toc-tic))
  
  # Now, subdivide the work across two threads
  t1 = Thread(target=countdown, args=(COUNT//2,))
  t2 = Thread(target=countdown, args=(COUNT//2,))
  tic = MPI.Wtime()
  for t in (t1, t2): t.start()
  for t in (t1, t2): t.join()
  toc = MPI.Wtime()
  print ("threaded:   %f seconds" % (toc-tic))
  