<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 一 threading模塊介紹 multiprocess模塊的完全模仿了threading模塊的接口,二者在使用層面,有很大的相似性,因而不再詳細介紹 ## 二 開啟線程的兩種方式 ### **方式一:直接使用** ~~~ from threading import Thread import time def sayhi(name): time.sleep(2) print('%s say hello' %name) if __name__ == '__main__': t=Thread(target=sayhi,args=('egon',)) t.start() print('主線程') ~~~ ### **方式二:自定義類** ~~~ from threading import Thread import time class Sayhi(Thread): def __init__(self,name): super().__init__() self.name=name def run(self): time.sleep(2) print('%s say hello' % self.name) if __name__ == '__main__': t = Sayhi('egon') t.start() print('主線程') ~~~ ## **守護線程與守護進程** 無論是進程還是線程,都遵循:守護xxx會等待主xxx**運行完畢**后被銷毀 需要強調的是:運行完畢并非終止運行 ### **運行完畢的解釋** 1. 對主進程來說 運行完畢指的是主進程代碼運行完畢 2. 對主線程來說 運行完畢指的是主線程所在的進程內所有非守護線程統統運行完畢,主線程才算運行完畢 ### **守護xx的詳細解釋:** 1. 守護進程: 主進程在其代碼結束后就已經算運行完畢了(守護進程在此時就被回收),然后主進程會一直等非守護的子進程都運行完畢后回收子進程的資源(否則會產生僵尸進程),才會結束, 2. 守護線程 主線程在其他非守護線程運行完畢后才算運行完畢(守護線程在此時就被回收) 因為主線程的結束意味著進程的結束,進程整體的資源都將被回收,所以主線程必須保證非守護線程都運行完畢后才能結束。 ### 代碼驗證 ~~~ from threading import Thread import time def sayhi(name): time.sleep(2) print('%s say hello' %name) if __name__ == '__main__': t=Thread(target=sayhi,args=('egon',)) t.setDaemon(True) #必須在t.start()之前設置 t.start() print('主線程') print(t.is_alive()) ~~~ 執行結果 ~~~ 主線程 True ~~~ ## Thread對象的其他屬性或方法 ### Thread實例對象的方法 * isAlive(): 返回線程是否活動的。 * getName(): 返回線程名。 * setName(): 設置線程名。 ### threading模塊提供的一些方法: * threading.currentThread(): 返回當前的線程變量。 * threading.enumerate(): 返回一個包含正在運行的線程的list。 * threading.activeCount(): 返回正在運行的線程數量 **驗證** ~~~ from threading import Thread import threading,os from multiprocessing import Process def work(): import time time.sleep(3) print(threading.current_thread().getName()) if __name__ == '__main__': t=Thread(target=work) t.start() print(threading.current_thread().getName()) print(threading.current_thread()) #主線程 print(threading.enumerate()) #連同主線程在內有兩個運行的線程 print(threading.active_count()) print('主線程/主進程') ~~~ 執行結果 ~~~ MainThread <_MainThread(MainThread, started 140735268892672)> [<_MainThread(MainThread, started 140735268892672)>, <Thread(Thread-1, started 123145307557888)>] 主線程/主進程 Thread-1 ~~~ ### **join方法等待子線程結束** 同多進程一樣,如果想要子進程結束后主線程再繼續,就用jion方法 ~~~ from threading import Thread import time def sayhi(name): time.sleep(2) print('%s say hello' %name) if __name__ == '__main__': t=Thread(target=sayhi,args=('egon',)) t.start() t.join() print('主線程') print(t.is_alive()) ~~~ 執行結果 ~~~ egon say hello 主線程 False ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看