中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是Python中的線程和多線程

發布時間:2020-08-25 14:36:28 來源:億速云 閱讀:131 作者:Leah 欄目:編程語言

什么是Python中的線程和多線程?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、線程的概念 

一個進程里面至少有一個控制線程,進程的概念只是一種抽象的概念,真正在CPU上面調度的是進程里面的線程,就好比真正在地鐵這個進程里面工作的實際上是地鐵里面的線程,北京地鐵里面至少要有一個線程,線程是真正干活的,線程用的是進程里面包含的一堆資源,線程僅僅是一個調度單位,不包含資源。

什么時候需要開啟多個線程:一個進程里面的多個線程共享這個進程里面的資源,因此如果多個任務共享同一塊資源的時候,需要開啟多個線程。 多線程指的是,在一個進程中開啟多個線程,簡單的說:如果多個任務共用同一個資源空間,那么必須在一個進程內開啟多個線程。一個進程這個任務里面可能對應多個分任務,如果一個進程里面只開啟一個線程的話,多個分任務之間實際上是串行的執行效果,即一個程序里面只含有一條執行路徑。

對于計算密集型應用,應該使用多進程;對于IO密集型應用,應該使用多線程。線程的創建比進程的創建開銷小的多。

二、Python中線程的特點 

1.在其他語言當中,一個進程里面開啟多個線程,每個線程都可以給一個cpu去使用,但是在 python當中,在同一時刻,一個進程當中只能有一個線程處于運行狀態。

2.比如在其他語言當中,比如我現在開啟了一個進程,這個進程當中含有幾個線程,如果我現在有多個cpu,每一個線程是可以對應相應的CPU的。 

3.但是在python當中,如果我們現在開啟了一個進程,這個進程里面對應多個線程,同一時刻只有一個線程可以處于運行狀態。 對于其他語言而言,在多CPU系統中,為了最大限度的利用多核,可以開啟多個線程。 但是Python中的多線程是利用不了多核優勢的。    

4.在同一個進程當中,多個線程彼此之間可以相互通信;但是進程與進程之間的通信必須基于IPC這種 消息的通信機制(IPC機制包括隊列和管道)。在一個進程當中,改變主線程可能會影響其它線程的行為,但是改變父進程并不會影響其它子進程的行為,因為進程與進程之間是完全隔離的。 在python當中,在同一時刻同一進程當中只能同時有一個線程在運行,如果有一個線程使用了系統調用而阻塞,那么整個進程都會被掛起。

三、多線程的理解

多進程和多線程都可以執行多個任務,線程是進程的一部分。線程的特點是線程之間可以共享內存和變量,資源消耗少(不過在Unix環境中,多進程和多線程資源調度消耗差距不明顯,Unix調度較快),缺點是線程之間的同步和加鎖比較麻煩。

四、Python多線程創建

在Python中,同樣可以實現多線程,有兩個標準模塊thread和threading,不過我們主要使用更高級的threading模塊。使用例子:

import threading
import time
 
def target():
    print 'the curent threading  %s is running' % threading.current_thread().name
    time.sleep(1)
    print 'the curent threading  %s is ended' % threading.current_thread().name
 
print 'the curent threading  %s is running' % threading.current_thread().name
t = threading.Thread(target=target)
 
t.start()
t.join()
print 'the curent threading  %s is ended' % threading.current_thread().name

輸出:

the curent threading  MainThread is running
the curent threading  Thread-1 is running
the curent threading  Thread-1 is ended
the curent threading  MainThread is ended

start是啟動線程,join是阻塞當前線程,即使得在當前線程結束時,不會退出。從結果可以看到,主線程直到Thread-1結束之后才結束。

Python中,默認情況下,如果不加join語句,那么主線程不會等到當前線程結束才結束,但卻不會立即殺死該線程。如不加join輸出如下:

the curent threading  MainThread is running
the curent threading  Thread-1 is running
the curent threading  MainThread is ended
the curent threading  Thread-1 is ended

但如果為線程實例添加t.setDaemon(True)之后,如果不加join語句,那么當主線程結束之后,會殺死子線程。

代碼:

import threading
import time
def target():
    print 'the curent threading  %s is running' % threading.current_thread().name
    time.sleep(4)
    print 'the curent threading  %s is ended' % threading.current_thread().name
print 'the curent threading  %s is running' % threading.current_thread().name
t = threading.Thread(target=target)
t.setDaemon(True)
t.start()
t.join()
print 'the curent threading  %s is ended' % threading.current_thread().name

輸出如下:

the curent threading  MainThread is running
the curent threading  Thread-1 is runningthe curent threading  MainThread is ended

如果加上join,并設置等待時間,就會等待線程一段時間再退出:

import threading
import time
def target():
    print 'the curent threading  %s is running' % threading.current_thread().name
    time.sleep(4)
    print 'the curent threading  %s is ended' % threading.current_thread().name
print 'the curent threading  %s is running' % threading.current_thread().name
t = threading.Thread(target=target)
t.setDaemon(True)
t.start()
t.join(1)

輸出:

the curent threading  MainThread is running
the curent threading  Thread-1 is running
the curent threading  MainThread is ended

主線程等待1秒,就自動結束,并殺死子線程。如果join不加等待時間,t.join(),就會一直等待,一直到子線程結束,輸出如下:

the curent threading  MainThread is running
the curent threading  Thread-1 is running
the curent threading  Thread-1 is ended
the curent threading  MainThread is ended

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

奉贤区| 南投市| 桑植县| 界首市| 开江县| 宜君县| 宜春市| 安化县| 新闻| 东源县| 南京市| 西充县| 嵊州市| 楚雄市| 吉林市| 炉霍县| 迁安市| 响水县| 河池市| 华亭县| 岢岚县| 潜江市| 云梦县| 泸溪县| 光泽县| 福州市| 姜堰市| 凉山| 嘉黎县| 安乡县| 葫芦岛市| 杭锦后旗| 贡觉县| 岱山县| 南江县| 明水县| 陈巴尔虎旗| 保定市| 庆云县| 西和县| 磴口县|