Python中線程的使用

來源:互聯網
上載者:User

線程啟動之後,會執行一個函數,當該函數執行完之後,線程也就結束了,該函數只被執行一次。
下面我以問題的形式,給出一些我的理解。

想讓線程不停地運行,該怎麼實現?一般有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),來實現定時觸發。

#!/usr/bin/python# -*-coding:utf-8 -*-import sys;import os;import time;import threading;class MTimerClass(threading.Thread):  # cookie監控時鐘    def __init__(self,fn,args=(),sleep=1):                threading.Thread.__init__(self)        self.fn = fn          self.args = args          self.sleep = sleep         self.setDaemon(True)                self.isPlay = True  #當前是否運行         self.fnPlay = False #當前已經完成運行        self.thread_stop=False;             def SetSleep(self,sleep): # 重新設定 時間間隔        self.sleep=sleep;            def __do(self):        self.fnPlay = True;        apply(self.fn,self.args);        self.fnPlay = False     def run(self):         while self.isPlay :             if self.thread_stop==True:                break;            #if SubCommon.ifexeStop==True:  #可以外部調用 來關掉線程。            #    print 'thread break'            #    break;              #print self.sleep;            time.sleep(self.sleep)             self.__do();                def stop(self):          #stop the loop          self.thread_stop = True;        self.isPlay = False;         while True:            if not self.fnPlay : break                         time.sleep(0.01)def GetSearchinfo():    print 'hhhhh...';    # to do    pass;    def main():    tCheck=MTimerClass(GetSearchinfo, '',  60);    tCheck.setDaemon(True); # 隨主線程一起結果    tCheck.start();         #線程啟動if __name__== "__main__":    main();

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.