threading多线程模块
生活随笔
收集整理的這篇文章主要介紹了
threading多线程模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
操作系統:(承上啟下作用,起到硬件與應用程序之間的連接作用(或者接口作用))
進程:本質上是一段程序運行的過程,是一個抽象的概念。
進程的目的就是切換,也就是程序A與程序B矛盾時,可以切換執行,提高CPU的效率。
進程包括三部分:程序,數據集,程序控制塊三個部分。
程序是一個實體,進程是一個抽象。數據集相當于輸入。程序控制塊用于切換時,記錄上一個進程執行到哪等信息。
說道切換,可以是一個進程遇到IO操作的時候,執行切換(因為IO時,CPU空閑);也可以根據時間序列切換等等。
如果只有一個CPU,進程切換只是實現并發(感覺看起來一起執行,比如既可以上網,也可以聽歌,實際上不是同時執行),
并行至少需要多核(多個cpu).這樣假如兩個CPU同時對應4個任務,這樣就既有并行也有并發。
線程:有了進程后,可以實現一邊玩游戲一邊聽音樂了。假設一個文本程序,當鍵盤輸入的同時,需要屏幕顯示,并且同時刻錄到磁盤中。
如果只是用一個進程的話,只能安順序執行,也就是說鍵盤輸入的同時,屏幕上是看不到的,要等輸入完。
因此需要多進程,但是一個程序就這樣分了,搞得跟多個程序似的,并且多進程切換過程會降低效率。
線程其實可以理解為一個進程中微進程,它共享一個進程中的資源集,線程的切換也比進程的切換省事。比如扣扣,既可以一邊聊天,
又可以一邊接收郵箱信息。它們共享一個用戶的信息,狀態什么的。
進程與線程區別:
1.一個程序至少有一個進程,一個進程至少有一個線程。(進程可以理解成線程的容器)
2.進程在執行過程中擁有獨立的內存單元,而多個線程共享(一個進程)內存,從而極大地提高了程序的運行效率
3.線程是最小的執行單元,進程是最小的資源單位(操作系統分資源最小分發進程)。線程不可能脫離進程獨立存在
等等
下面看兩個簡單的多線程例子: 1 import threading 2 import time 3 4 def music(): 5 print("begin to listen %s"%time.ctime()) 6 time.sleep(3) 7 print("stop listening %s" % time.ctime()) 8 9 def game(): 10 print("begin to game %s"%time.ctime()) 11 time.sleep(5) 12 print("stop gaming %s" % time.ctime()) 13 14 15 if __name__ == '__main__': 16 17 t1 = threading.Thread(target=music) 18 19 t2 = threading.Thread(target=game) 20 21 t1.start() # 與lesson2放在上面是一樣的 22 t2.start() 23 24 t1.join() # join這個方法是子線程對象調用的函數,函數的意思是t1這個子線等待結束后,主線程才能走 25 # t2.join() 26 27 # 與join對應的.setDaemon是守護線程,比如T1設置為守護線程, 28 # 意思就是t1這個線程跟主線程一起退,主線程結束后,它問一下其他非守護線程,其他的非守護線程也都結束,它結束 29 30 print("ending............") View Code 1 ''' 2 線程,threading可以開線程,里面實例對象有幾個重要的方法,比如:.start,.join,.setDaemon 3 t = threading.Thread() 4 以上是t的方法(實例化的屬性) 5 另外threading模塊還有一些方法: 6 threading.currentThread() 返回當前的線程變量 7 threading.enumerate() 返回一個包含正在運行的線程的list.正在運行指線程啟動后,結束前。 8 threading.activeCount() 返回正在運行的線程數量,與len(threading.enumerate())有相同的結果 9 ''' 10 11 import threading # 線程 12 import time 13 14 15 def Hi(num, i): 16 print("hello %s" % num) 17 time.sleep(int(i)) 18 19 20 if __name__ == '__main__': 21 22 # 主線程下面開了兩個子線程 23 24 t1 = threading.Thread(target=Hi, args=(10,2)) # 實例化一個線程對象,開一個子線程1 25 t1.start() 26 27 t2 = threading.Thread(target=Hi, args=(9,7)) # 實例化一個線程對象,開一個子線程2 28 t2.start() 29 30 print("ending.................") View Code
進程:本質上是一段程序運行的過程,是一個抽象的概念。
進程的目的就是切換,也就是程序A與程序B矛盾時,可以切換執行,提高CPU的效率。
進程包括三部分:程序,數據集,程序控制塊三個部分。
程序是一個實體,進程是一個抽象。數據集相當于輸入。程序控制塊用于切換時,記錄上一個進程執行到哪等信息。
說道切換,可以是一個進程遇到IO操作的時候,執行切換(因為IO時,CPU空閑);也可以根據時間序列切換等等。
如果只有一個CPU,進程切換只是實現并發(感覺看起來一起執行,比如既可以上網,也可以聽歌,實際上不是同時執行),
并行至少需要多核(多個cpu).這樣假如兩個CPU同時對應4個任務,這樣就既有并行也有并發。
線程:有了進程后,可以實現一邊玩游戲一邊聽音樂了。假設一個文本程序,當鍵盤輸入的同時,需要屏幕顯示,并且同時刻錄到磁盤中。
如果只是用一個進程的話,只能安順序執行,也就是說鍵盤輸入的同時,屏幕上是看不到的,要等輸入完。
因此需要多進程,但是一個程序就這樣分了,搞得跟多個程序似的,并且多進程切換過程會降低效率。
線程其實可以理解為一個進程中微進程,它共享一個進程中的資源集,線程的切換也比進程的切換省事。比如扣扣,既可以一邊聊天,
又可以一邊接收郵箱信息。它們共享一個用戶的信息,狀態什么的。
進程與線程區別:
1.一個程序至少有一個進程,一個進程至少有一個線程。(進程可以理解成線程的容器)
2.進程在執行過程中擁有獨立的內存單元,而多個線程共享(一個進程)內存,從而極大地提高了程序的運行效率
3.線程是最小的執行單元,進程是最小的資源單位(操作系統分資源最小分發進程)。線程不可能脫離進程獨立存在
等等
下面看兩個簡單的多線程例子: 1 import threading 2 import time 3 4 def music(): 5 print("begin to listen %s"%time.ctime()) 6 time.sleep(3) 7 print("stop listening %s" % time.ctime()) 8 9 def game(): 10 print("begin to game %s"%time.ctime()) 11 time.sleep(5) 12 print("stop gaming %s" % time.ctime()) 13 14 15 if __name__ == '__main__': 16 17 t1 = threading.Thread(target=music) 18 19 t2 = threading.Thread(target=game) 20 21 t1.start() # 與lesson2放在上面是一樣的 22 t2.start() 23 24 t1.join() # join這個方法是子線程對象調用的函數,函數的意思是t1這個子線等待結束后,主線程才能走 25 # t2.join() 26 27 # 與join對應的.setDaemon是守護線程,比如T1設置為守護線程, 28 # 意思就是t1這個線程跟主線程一起退,主線程結束后,它問一下其他非守護線程,其他的非守護線程也都結束,它結束 29 30 print("ending............") View Code 1 ''' 2 線程,threading可以開線程,里面實例對象有幾個重要的方法,比如:.start,.join,.setDaemon 3 t = threading.Thread() 4 以上是t的方法(實例化的屬性) 5 另外threading模塊還有一些方法: 6 threading.currentThread() 返回當前的線程變量 7 threading.enumerate() 返回一個包含正在運行的線程的list.正在運行指線程啟動后,結束前。 8 threading.activeCount() 返回正在運行的線程數量,與len(threading.enumerate())有相同的結果 9 ''' 10 11 import threading # 線程 12 import time 13 14 15 def Hi(num, i): 16 print("hello %s" % num) 17 time.sleep(int(i)) 18 19 20 if __name__ == '__main__': 21 22 # 主線程下面開了兩個子線程 23 24 t1 = threading.Thread(target=Hi, args=(10,2)) # 實例化一個線程對象,開一個子線程1 25 t1.start() 26 27 t2 = threading.Thread(target=Hi, args=(9,7)) # 實例化一個線程對象,開一個子線程2 28 t2.start() 29 30 print("ending.................") View Code
?
轉載于:https://www.cnblogs.com/maxiaonong/p/9500372.html
總結
以上是生活随笔為你收集整理的threading多线程模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 管理你的代码——Git学习(一)
- 下一篇: C语言多线程编程一