Python:使用threading模块实现多线程编程二[两种方式起线程]

时间:2022-07-30 18:33:26

在Python中我们主要是通过thread和threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用threading模块实现多线程编程。一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。

将函数传递进Thread对象 Python代码
  1. '''''  
  2. Created on 2012-9-5  
  3.    
  4. @author:  walfred 
  5. @module: thread.ThreadTest1  
  6. @description: 
  7. '''    
  8. import threading  
  9.   
  10. def thread_fun(num):  
  11.     for n in range(0, int(num)):  
  12.         print " I come from %s, num: %s" %( threading.currentThread().getName(), n)  
  13.   
  14. def main(thread_num):  
  15.     thread_list = list();  
  16.     # 先创建线程对象  
  17.     for i in range(0, thread_num):  
  18.         thread_name = "thread_%s" %i  
  19.         thread_list.append(threading.Thread(target = thread_fun, name = thread_name, args = (20,)))  
  20.       
  21.     # 启动所有线程     
  22.     for thread in thread_list:  
  23.         thread.start()  
  24.       
  25.     # 主线程中等待所有子线程退出  
  26.     for thread in thread_list:  
  27.         thread.join()  
  28.   
  29. if __name__ == "__main__":  
  30.     main(3)  

        程序启动了3个线程,并且打印了每一个线程的线程名字,这个比较简单吧,处理重复任务就派出用场了,下面介绍使用继承threading的方式;

继承自threading.Thread类 Python代码
  1. ''''' 
  2. Created on 2012-9-6 
  3.   
  4. @author: walfred 
  5. @module: thread.ThreadTest2 
  6. '''  
  7.   
  8. import threading  
  9.   
  10. class MyThread(threading.Thread):  
  11.     def __init__(self):  
  12.         threading.Thread.__init__(self);  
  13.           
  14.     def run(self):  
  15.         print "I am %s" %self.name  
  16.           
  17. if __name__ == "__main__":  
  18.     for thread in range(05):  
  19.         t = MyThread()  
  20.         t.start()  

        接下来的文章,将会介绍如何控制这些线程,包括子线程的退出,子线程是否存活及将子线程设置为守护线程(Daemon)。