<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC=1,5] >[success] # 線程和進程 ~~~ 1.線程是操作系統能夠進行運算調度的最小單位。 2.他被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中的一個單一順序的控制流,一個進程中可以并發多個線程,每個線程并行執行不同的任務。 3.進程:要以一個整體的形式暴露給操作系統管理,里面包含對各種資源的調用,堆存的管理,網絡接口調用等,對資源管理的集合就可以成為進程 4.線程:是操作系統最小的調度單位,是一串指令的集合 5.進程 要操作cpu,必須要創建一個線程~ 大白話解釋: 1.電腦有固定的內存,我們可以吧應用程序理解成進程,當我們打開各種各樣的應用程序的時候,我們的內存就會越來越小,這是因為進程調度內存空間, 2.不同進程占用不同的空間相互不進行干涉,可以理解成qq程序崩潰不會影響到word程序,線程在進程中,線程會跟cup進行聯系調度, 3.如果qq進程中 一個線程崩潰,會導qq進程的崩潰~簡單理解進程就是劃分程序要用的內存,里面包含著一些線程,進程會跟cup進行運算的調度 ~~~ >[success] # 簡單的使用線程 >[danger] ##### 簡單使用線程 * 不使用線程 ~~~ 1.當第一個countdown(10) 執行完后執行countdown(5),是一個串行效果 ~~~ ~~~ import time def countdown(n): while n > 0: print('T-minus', n) n -= 1 time.sleep(1) countdown(10) countdown(5) 打印結果: T-minus 5 T-minus 4 T-minus 3 T-minus 2 T-minus 1 T-minus 2 T-minus 1 ~~~ * 使用線程 ~~~ 1.使用線程中有兩個參數,Thread(target=, args= ),target是目標函數,args是目標函數參數,但是是元組形式 2.start 調用線程 3.這樣就形成t1 和t2 并行執行 ~~~ ~~~ from threading import Thread import time def countdown(n): while n > 0: print('T-minus', n) n -= 1 time.sleep(1) t1 = Thread(target=countdown, args=(5,)) t2 = Thread(target=countdown, args=(2,)) t1.start() t2.start() 打印結果: T-minus 5 T-minus 2 T-minus 4 T-minus 1 T-minus 3 T-minus 2 T-minus 1 ~~~ >[danger] ##### 構造一個線程的繼承類 ~~~ 1.通過繼承線程類,重寫里面的run方法,線程類中的run方法用來執行線程方法 ~~~ ~~~ import threading import time class MyTreading(threading.Thread): def __init__(self,n): super(MyTreading,self).__init__() self.n = n def run(self): print("多線程"+self.n) t1 = MyTreading("t1") t2 = MyTreading("t2") t1.start() t2.start() ~~~ >[danger] ##### 讓類中的方法開啟線程 ~~~ class CountdownTask: def __init__(self): self._running = True def terminate(self): self._running = False def run(self, n): while self._running and n > 0: print('T-minus', n) n -= 1 time.sleep(5) c = CountdownTask() t = Thread(target=c.run, args=(10,)) t.start() // 線程中參數共享,所以會停止線程 c.terminate() t.join() ~~~ >[danger] ##### 判斷線程是否運行 --- is_alive ~~~ t = Thread(target=countdown, args=(5,)) if t.is_alive(): print('Still running') else: print('Completed') ~~~ >[danger] ##### 設置線程守護函數 --- daemon ~~~ // true 開啟線程守護 t = Thread(target=countdown, args=(10,), daemon=True) ~~~ >[danger] ##### 計算線程運行時長 -- join ~~~ 1.想知道線程時長就給知道兩個概念 --- 主線程和子線程2 2.主線程和 子線程就像打游戲, 主線任務和支線任務,主線任務就是這個程序從頭到尾執行一遍,支線任務就是你開啟的線程 ~~~ * 通過例子認識主線程和子線 ~~~ 代碼測試run函數的運行時長 1.這段代碼的打印結果是0.0010008811950683594 2.實際我們通過嘗試推斷這個代碼運行時間應該時最后一個線程結束時間 5/10+0.1 3.為什么執行結果小于我們做的預期判斷,是因為,這個打印結果的運行時間是,主線程 4.就像打游戲我們的主線任務就是從頭跑到尾,所以這段代碼實際有 5+1個線程 ~~~ ~~~ import threading import time def run(n,m): print("線程%s"%n) time.sleep(m) star_time = time.time() # 開啟五個線程,每個線程運行時間成遞增 for i in range(5): t1 = threading.Thread(target=run,args=(i,i/10+0.1) ) t1.start() print('主線程') print(float(time.time()-star_time)) ~~~ * 計算線程時間運行時間 join ~~~ 1.將線程連接知道最后一個線程結束才釋放,也就是線程沒有全部結束就不能往下執行 2.下面的案例只要子線程中第五個沒結束,代碼就不能往下進行,所以主線程等所有子線程結束后,在執行 ~~~ ~~~ import threading import time #創建一個保存線程的列表 list_threading = [] def run(n,m): print("線程%s"%n) time.sleep(m) star_time = time.time() for i in range(5): t1 = threading.Thread(target=run,args=(i,i/10+0.1) ) t1.start() list_threading.append(t1) #循環列表執行join for ii in list_threading: ii.join() print('主線程',star_time-time.time()) 打印結果: 線程0 線程1 線程2 線程3 線程4 主線程 -0.5024936199188232 ~~~ >[danger] ##### 打印子線程 和主線程 ~~~ import threading def run(n): print("線程%s"%n,threading.current_thread()) for i in range(5): t1 = threading.Thread(target=run ,args=(i,)) t1.start() #主線程 print(threading.current_thread()) 打印結果: 線程0 <Thread(Thread-1, started 9572)> 線程1 <Thread(Thread-2, started 7916)> 線程2 <Thread(Thread-3, started 4856)> 線程3 <Thread(Thread-4, started 5396)> 線程4 <Thread(Thread-5, started 9400)> <_MainThread(MainThread, started 3360)> ~~~ >[danger] ##### 線程守護 --- daemon ~~~ 1.當主線程結束后,開啟守護的線程自動結束 2.通過運行結果發現因為是個主線程開啟了守護,所以主線程結束其他線程也跟著結束 3.守護線程的生命周期在非守護線程結束時結束 ~~~ * 未開啟守護線程 ~~~ 1.下面線程主線程結束了下面線程依舊還在執行 ~~~ ~~~ import threading import time def run(n): print("線程%s"%n) time.sleep(2) print("未開啟守護打印線程%s"%n) for i in range(4): t1= threading.Thread(target=run,args=(i,), ) t1.start() print("主線程") 打印結果: 線程0 線程1 線程2 線程3 主線程 未開啟守護打印線程3 未開啟守護打印線程2 未開啟守護打印線程0 未開啟守護打印線程1 ~~~ * 開啟守護線程 --- daemon ~~~ import threading import time def run(n): print("線程%s"%n) time.sleep(2) print("未開啟守護打印線程%s"%n) for i in range(4): t1= threading.Thread(target=run,args=(i,), daemon=True) t1.start() print("主線程") 打印結果: 線程0 線程1 線程2 線程3 主線程 ~~~
                  <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>

                              哎呀哎呀视频在线观看