python中的執行緒(二)

2021-09-26 15:07:14 字數 2634 閱讀 4207

上回我們說到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中的執行緒

執行緒的理解應該結合程序來對比理解更直接 如果我們作業系統當做乙個工廠的話,那麼建立乙個程序就相當於在這個工廠裡面新增了乙個車間,車間裡面存放了很多資源,而車間要執行起來很顯然的標誌就是流水線,而這些流水線就是執行緒,可以說執行緒是執行 的最小單位。而執行緒和程序兩者在使用層面上有很大的相似性,所以...