1. 程式人生 > >進程 線程 threading模塊

進程 線程 threading模塊

理解 資源分配 不能 程序 rgs ... 結果 可能 pan

# 進程:本質上就是一個程序在一個數據集上的一次動態執行過程(抽象的概念)
# 進程一般由程序、數據集(程序運行過程中所需要使用的資源)、進程控制塊(記錄進程的外部特征,描述進程的執行變化過程)三部分組成
# 進程是最小的資源單位

# 線程的出現是為了降低上下文切換的消耗,提高系統的並發性,並突破一個進程只能幹一樣事的缺陷,使到進程內並發成為可能
# 線程:是最小的執行單位
# 進程與線程的聯系與區別 # 1、一個程序至少有一個進程,一個進程至少有一個線程 (進程可以理解成線程的容器) # 2、進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率 # 3、線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制、
# 4、進程是具有一定獨立功能的程序關於某個數據集上的一次運行活動,裏程是系統進行資源分配和調度的一個獨立單位 # 5、線程是進程的一個實體,是cpu調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位,線程自己基本不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧)但是它可與同屬一個進程的其它線程共享進程所擁有的全部資源 # 6、一個線線可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行 # threading線程模塊 import threading, time def hi(num): print(hello world,
, num) time.sleep(3) class MyThread(threading.Thread): # 自定義線程類 def __init__(self, num): # 初始化,獲取num self.num = num def run(self): # 將hi函數體寫入run()方法內,必須要重寫run方法 print(hello world,, self.num) time.sleep(3) if __name__ == __main__: t1 = threading.Thread(target=hi, args=(10,)) #
創建了一個線程對象,目標指向hi函數,args後是元組形式的參數 t2 = threading.Thread(target=hi, args=(9,)) t3 = MyThread(8) # 通過自定義的線程類創建t3線程對象,這種方式不常用 t1.start() # 啟動t1線程 t1.join() # 在t1子線程完成之前,這個子線程的父線程將一直被阻塞 t2.setDaemon(True) # setDaemon(守護線程) 必須在start之前設置 # 當我們在程序運行中,執行一個主線程,如果主線程又創建一個子線程,主線程和子線程就兵分兩路分別運行 # 那麽當主線程完成想退出時,會檢驗子線程是否完成。如果子線程未完成,則主線程會等子線程完成後再退出 # 但有時候我們需要的是,只要主線程完成了,不管子線程是否完成,都要和主線程一起退出,這時就可以使用setDaemon方法了 t2.start() print(t1.getName()) # Thread-1 print(threading.active_count()) # 2 print(threading.enumerate()) # [<_MainThread(MainThread, started 3672)>, <Thread(Thread-2, started daemon 11632)>] print(end...) # threading的其它方法 # run() 用以表示線程活動的方法 # start() 啟動線程活動 # isAlive() 返回線程是否活動的 # getName() 返回線程名 # setName() 設置線程名 # threading模塊提供的一些方法 # threading.currentThread() 返回當前的線程變量 # threading.enumerate() 返回一個包含正在運行的線程的list。正在運行指線程啟動後、結束前,不包括啟動前和終止後的線程 # threading.activeCount() 返回正在運行的線程數量,與len(threading.enumerate())有相同的結果

進程 線程 threading模塊