上回我們說到gil鎖了,這不僅是python弊病,也是解釋型語言的弊病。我相信在不久後,python的官方團隊或者各位讀者會把這個問題解決了的。那我們就接著往下學習執行緒。
我們舉個例子,我覺得例子能夠很好的解釋其中的道理。
import time
from threading import thread
from multiprocessing import process
def func(n):
n + 1
if __name__ == '__main__':
start = time.time()
t_lst =
for i in range(100):
t = thread(target=func,args=(i,))
t.start()
for t in t_lst:t.join()
t1 = time.time() - start
start = time.time()
t_lst =
for i in range(100):
t = process(target=func, args=(i,))
t.start()
for t in t_lst: t.join()
t2 = time.time() - start
print(t1,t2)
輸出的結果是:多執行緒:0.012920379638671875 多程序:4.705415725708008
結果相差 391.66倍
使用這些方法需要引用
import threading
# print(threading.active_count()) # 檢視存活執行緒數
#print(threading.current_thread()) 獲取當前執行緒物件
# print(threading.enumerate()) 獲取所有執行緒物件
threading.get_ident()) # 獲取當前執行緒的id
還有一些方法是 例項方法
# isalive(): 返回執行緒是否活動的
# getname(): 返回執行緒名
# setname(): 設定執行緒名
守護執行緒聽著很熟悉,和之前學習的守護程序差不多。但又不一樣,不一樣在**呢? 這裡舉一段例子進行說明
def func1():
while true:
time.sleep(1)
print('這是守護執行緒')
def func2():
time.sleep(8)
print('這是其他子執行緒')
if __name__ == '__main__':
t1 = thread(target=func1)
thread(target=func2).start()
t1.daemon = true
t1.start()
print('這是主線程')
time.sleep(3)
輸出結果為:
解釋:
在這個例子的解釋就是 主線程和守護執行緒和子執行緒共同執行3秒後,這時候主線程的**執行完畢 但是看到子執行緒沒執行完,所以它也不會結束。守護執行緒看著主程序沒有結束,它也會執行 直到子執行緒執行完畢
總結:主線程在其他非守護執行緒執行完畢後才算執行完畢(守護執行緒在此時就被**)。
大家看到執行緒的關係之後,不經聯想起之前學過的程序的關係。那我在這裡總結一下程序的 主程序 守護程序 和其他子程序的關係
def func1():
while true:
time.sleep(0.5)
print('這是守護程序')
def func2():
print('這是其他子程序')
time.sleep(10)
if __name__ == '__main__':
p = process(target=func1)
p.daemon = true
p.start()
process(target=func2).start()
print('這是主程序')
time.sleep(3)
結果:
解釋:主程序和守護程序以及子程序會共同執行
3秒,然後主程序**執行完畢。這時候,主程序停下來
等待子程序結束。守護程序看主程序結束了,就停止了
總結:主程序會一直等非守護的子程序都執行完畢後**子程序的資源(否則會產生殭屍程序),才會結束。
python執行緒喚醒 Python中的執行緒
執行緒同步 概念執行緒同步,執行緒間協同,通過某種技術,讓乙個執行緒訪問某些資料時,其他執行緒不能訪問這些資料,直到該執行緒完成對資料的操作.臨界區 critical section 互斥量 mutex 訊號量 semaphore 時間 event event事件 event事件,是執行緒間通訊機制...
python中的執行緒
執行緒是作業系統中能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。好處 1 易於排程。2 提高併發性。通過執行緒可方便有效地實現併發性。程序可建立多個執行緒來執行同一程式的不同部分。3 開銷少。建立執行緒比建立程序要快,所需開銷很少 1.多執行緒之間共享資料時存在資源競爭問題...
python中的執行緒
執行緒的理解應該結合程序來對比理解更直接 如果我們作業系統當做乙個工廠的話,那麼建立乙個程序就相當於在這個工廠裡面新增了乙個車間,車間裡面存放了很多資源,而車間要執行起來很顯然的標誌就是流水線,而這些流水線就是執行緒,可以說執行緒是執行 的最小單位。而執行緒和程序兩者在使用層面上有很大的相似性,所以...