歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python中線程的使用

Python中線程的使用

日期:2017/3/1 10:11:43   编辑:Linux編程

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

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

想讓線程不停地運行,該怎麼實現?一般有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. self.isPlay = True #當前是否運行
  15. self.fnPlay = False #當前已經完成運行
  16. self.thread_stop=False;
  17. def SetSleep(self,sleep): # 重新設置 時間間隔
  18. self.sleep=sleep;
  19. def __do(self):
  20. self.fnPlay = True;
  21. apply(self.fn,self.args);
  22. self.fnPlay = False
  23. def run(self):
  24. while self.isPlay :
  25. if self.thread_stop==True:
  26. break;
  27. #if SubCommon.ifexeStop==True: #可以外部調用 來關掉線程。
  28. # print 'thread break'
  29. # break;
  30. #print self.sleep;
  31. time.sleep(self.sleep)
  32. self.__do();
  33. def stop(self):
  34. #stop the loop
  35. self.thread_stop = True;
  36. self.isPlay = False;
  37. while True:
  38. if not self.fnPlay : break
  39. time.sleep(0.01)
  40. def GetSearchinfo():
  41. print 'hhhhh...';
  42. # to do
  43. pass;
  44. def main():
  45. tCheck=MTimerClass(GetSearchinfo, '', 60);
  46. tCheck.setDaemon(True); # 隨主線程一起結果
  47. tCheck.start(); #線程啟動
  48. if __name__== "__main__":
  49. main();
Copyright © Linux教程網 All Rights Reserved