歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python中線程的使用

線程啟動之後,會執行一個函數,當該函數執行完之後,線程也就結束了,該函數只被執行一次。

下面我以問題的形式,給出一些我的理解。

想讓線程不停地運行,該怎麼實現?一般有2種方法:

(1)在該線程執行的函數中,設置一個死循環,即while true。當線程調用該函數時,則該函數就會陷入了死循環。當滿足某種條件之後,可以通過break退出該循環。本blog中介紹的“雙線程高效下載問題”和“多線程概述”中給出的代碼,都是這種方法。

(2)重寫線程中的run方法中,設置一個死循環,即while true,其他和方法一類似。

那如何實現每隔一段時間執行一次線程,即線程定時觸發執行?

可以通過在線程的循環中設置一個sleep方法,如time.sleep(30),則該線程每隔30秒之後就休眠,放棄cpu的使用權,30秒之後,再加入線程隊列,等待調用。即實現了我們的定時觸發線程的效果。

python使用線程是非常方便的,通過調用threading模塊就可以立刻使用。

下面給出一個python中thread的demo,可以復制,然後保存就可以運行。該demo是通過重寫run方法,在run中使用while true來循環,並在run中使用sleep(30),來實現定時觸發。

  1. #!/usr/bin/python   
  2. # -*-coding:utf-8 -*-   
  3. import sys;  
  4. import os;  
  5. import time;  
  6. import threading;  
  7. class MTimerClass(threading.Thread):  # cookie監控時鐘   
  8.     def __init__(self,fn,args=(),sleep=1):          
  9.         threading.Thread.__init__(self)  
  10.         self.fn = fn    
  11.         self.args = args    
  12.         self.sleep = sleep   
  13.         self.setDaemon(True)  
  14.           
  15.         self.isPlay = True  #當前是否運行    
  16.         self.fnPlay = False #當前已經完成運行   
  17.         self.thread_stop=False;   
  18.           
  19.     def SetSleep(self,sleep): # 重新設置 時間間隔   
  20.         self.sleep=sleep;  
  21.           
  22.     def __do(self):  
  23.         self.fnPlay = True;  
  24.         apply(self.fn,self.args);  
  25.         self.fnPlay = False   
  26.   
  27.     def run(self):   
  28.         while self.isPlay :   
  29.             if self.thread_stop==True:  
  30.                 break;  
  31.             #if SubCommon.ifexeStop==True:  #可以外部調用 來關掉線程。   
  32.             #    print 'thread break'   
  33.             #    break;     
  34.             #print self.sleep;   
  35.             time.sleep(self.sleep)   
  36.             self.__do();  
  37.               
  38.     def stop(self):    
  39.         #stop the loop     
  40.         self.thread_stop = True;  
  41.         self.isPlay = False;   
  42.         while True:  
  43.             if not self.fnPlay : break               
  44.             time.sleep(0.01)  
  45.   
  46. def GetSearchinfo():  
  47.     print 'hhhhh...';  
  48.     # to do   
  49.     pass;  
  50.       
  51. def main():  
  52.     tCheck=MTimerClass(GetSearchinfo, '',  60);  
  53.     tCheck.setDaemon(True); # 隨主線程一起結果   
  54.     tCheck.start();         #線程啟動   
  55.   
  56. if __name__== "__main__":  
  57.     main();  
Copyright © Linux教程網 All Rights Reserved