2013年1月2日 星期三

[Python] Python中的多執行緒


 在Python中如果要使用執行緒的話,其函式庫中提供了兩種方法:一種是以函式的方式使用,另一種則是將工作包裝成類別的方式。
1. 使用thread模組中的start_new_thread()來建立新的執行緒:
  1. import time  
  2. import thread  
  3.  
  4. def timer(no,interval):  #自己写的线程函数   
  5.     while True:   
  6.         print 'Thread :(%d) Time:%s'%(no,time.ctime())   
  7.     time.sleep(interval)   
  8.  
  9. def test(): #使用thread.start_new_thread()来产生2个新的线程   
  10.     thread.start_new_thread(timer,(1,1))     
  11.     thread.start_new_thread(timer,(2,3))   
  12.  
  13. if __name__=='__main__':   
  14.     test()  

 这个是thread.start_new_thread(function,args[,kwargs])函数原型,其中function参数是你将要调用的线程函数;args是讲传递给你的线程函数的参数,他必须是个tuple类型;而kwargs是可选的参数。
 线程的结束一般依靠线程函数的自然结束;也可以在线程函数中调用thread.exit(),他抛出SystemExit exception,达到退出线程的目的。
2、將工作包裝成threading.Thread的子類別來使用多執行緒:
  1. import threading  
  2. import time  
  3. class timer(threading.Thread):     #我的timer类继承自threading.Thread类   
  4.     def __init__(self,no,interval):    
  5.         #在我重写__init__方法的时候要记得调用基类的__init__方法   
  6.         threading.Thread.__init__(self)        
  7.         self.no=no   
  8.         self.interval=interval   
  9.            
  10.     def run(self):  #重写run()方法,把自己的线程函数的代码放到这里   
  11.         while True:   
  12.             print 'Thread Object (%d), Time:%s'%(self.no,time.ctime())   
  13.         time.sleep(self.interval)   
  14.                
  15. def test():   
  16.     threadone=timer(1,1)    #产生2个线程对象   
  17.     threadtwo=timer(2,3)   
  18.     threadone.start()   #通过调用线程对象的.start()方法来激活线程   
  19.     threadtwo.start()   
  20.        
  21. if __name__=='__main__':   
  22.     test()  

沒有留言:

張貼留言