new_contents: # Copyright (c) 2014 ASMlover. All rights reserved.
  #
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions
  # are met:
  #
  #  * Redistributions of source code must retain the above copyright
  #    notice, this list ofconditions and the following disclaimer.
  #
  #  * Redistributions in binary form must reproduce the above copyright
  #    notice, this list of conditions and the following disclaimer in
  #    the documentation and/or other materialsprovided with the
  #    distribution.
  #
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  # POSSIBILITY OF SUCH DAMAGE.
  #
  #!/usr/bin/env python
  # -*- encoding: utf-8 -*-
  
  
  import threading
  from time import sleep, ctime
  
  
  LOOPS = [4, 2]
  
  
  class ThreadFunc(object):
    def __init__(self, func, args, name=''):
      self.name = name
      self.func = func
      self.args = args
  
    def __call__(self):
      apply(self.func, self.args)
  
  
  def Loop(nloop, nsec):
    print 'start Loop', nloop, 'at:', ctime()
    sleep(nsec)
    print 'Loop', nloop, 'DONE at:', ctime()
  
  
  
  def Main():
    print 'starting at:', ctime()
    threads = []
    nloops = range(len(LOOPS))
  
    for i in nloops:
      t = threading.Thread(target=ThreadFunc(Loop, (i, LOOPS[i]), 
        Loop.__name__))
      threads.append(t)
  
    for i in nloops:
      threads[i].start()
  
    for i in nloops:
      threads[i].join()
  
    print 'all DONE at:', ctime()
  
  
  
  if __name__ == '__main__':
    Main()
  
subject: add demo of using threading.Thread with object