python 多執行緒就這樣

2022-09-17 13:00:12 字數 3378 閱讀 9555

講執行緒之前,先扯一下程序。

程式並不能單獨執行,只有將程式裝載到記憶體中,系統為它分配資源才能執行,而這種執行的程式就稱之為程序。

程式和程序的區別就在於:

在多道程式設計中,我們允許多個程式同時載入到記憶體中,在作業系統的排程下,可以實現併發地執行。這是這樣的設計,大大提高了cpu的利用率。程序的出現讓每個使用者感覺到自己獨cpu,因此,程序就是為了在cpu上實現多道程式設計而提出的。

程序有很多優點,它提供了多道程式設計,讓我們感覺我們每個人都擁有自己的cpu和其他資源,可以提高計算機的利用率。

但是,程序也有缺陷:

程序只能在乙個時間幹一件事,如果想同時幹兩件事或多件事,程序就無能為力了。

程序在執行的過程中如果阻塞,例如等待輸入,整個程序就會掛起,即使程序中有些工作不依賴於輸入的資料,也將無法執行。

乙個作業系統比喻成乙個工廠,每個車間就相當於乙個程序,乙個車間有多個員工組成,這些員工都可以並行進行生產,這時候車間效率是不是就起來了,每個工人就是執行緒。

執行緒是作業系統能夠進行運算排程的最小單位。

它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。

程序和執行緒的區別:

先來看看單執行緒的模式

# coding=utf-8

from time import ctime, sleep # ctime 獲取當前時間

def dinner(func):

for i in range(2):

sleep(1) # 休眠 1 s

def drink(func):

for i in range(2):

sleep(3)

if __name__ == '__main__':

dinner("豬腳飯")

drink("茅台")

print("all over {}" .format(ctime()))

定義兩個函式,乙個吃飯,乙個喝酒。

先看結果:

all over sat jan 15 15:45:36 2022

開始是 15:45:28,結束是 15:45:36 ,總耗時 8 s

現在的程式就是單執行緒模式,吃兩口豬腳飯,幹兩口茅台,順序執行。

python多執行緒官網介紹:

以下來修改以下**,實現一邊吃豬腳飯,一邊看電影。

# coding=utf-8

import threading

from time import ctime, sleep # ctime 獲取當前時間

def dinner(func):

for i in range(2):

sleep(1) # 休眠 1 s

def movie(func):

for i in range(2):

sleep(3)

threads = # 建立乙個空陣列

# 使用threading.thread()方法,target:呼叫 dinner 方法,args:傳參

thread1 = threading.thread(target=dinner, args=("豬腳飯",))

# 將建立好的執行緒 thread1 追加到 threads 中

print() # 換行

thread2 = threading.thread(target=movie, args=("阿甘正傳",))

if __name__ == '__main__':

# for 迴圈遍歷 threads 陣列

for t in threads:

t.setdaemon(true)

# 開始執行緒活動

t.start()

print()

print("all over {}" .format(ctime()))

setdaemon()

setdaemon(true)將執行緒宣告為守護執行緒,必須在start() 方法呼叫之前設定,如果不設定為守護執行緒程式會被無限掛起。

子執行緒啟動後,父執行緒也繼續執行下去,當父執行緒執行完最後一條語句

print("all over {}" .format(ctime())) 後,沒有等待子執行緒,直接就退出了,同時子執行緒也一同結束。

以上**執行結果:

all over sat jan 15 16:18:29 2022

檢視結果,子執行緒(dinner 和 movie)和主線程 print("all over {}" .format(ctime())) 都是同一時間啟動。

設定守護執行緒之後,當主線程結束時,子執行緒也將立即結束,不再執行。

主線程等待子執行緒結束

為了讓守護執行緒(子執行緒)執行結束之後,主線程再結束,我們可以使用 join 方法,讓主線程等待子執行緒執行。

for t in threads:

t.join()

join()方法的位置是在for迴圈外,等兩個子執行緒結束後,再執行主程序。

# coding=utf-8

import threading

from time import ctime, sleep # ctime 獲取當前時間

def dinner(func):

for i in range(2):

sleep(1) # 休眠 1 s

def movie(func):

for i in range(2):

sleep(3)

threads =

thread1 = threading.thread(target=dinner, args=("豬腳飯",))

print() # 換行

thread2 = threading.thread(target=movie, args=("阿甘正傳",))

if __name__ == '__main__':

for t in threads:

t.setdaemon(true)

t.start()

for t in threads:

t.join()

print()

print("end: {}" .format(ctime()))

先看結果:

end: sat jan 15 17:57:05 2022

子執行緒 dinner 和 movie 是同時開始的,17:56:59 開始,直到呼叫主程序為17:57:05 ,

總耗時 6 s。單執行緒的時候耗時 8 s,使用多執行緒耗時減少 2 s。

所以可以看出多執行緒執行程式會快一些。

There you go 就這樣了

有時候你提醒別人講話別講太久也是用 there you go.例如有一次班上同學交報告給教授,結果教授還跟他講東講西的,那老美也不客氣,就說,well,i just came by to give you my report,so,there you go 這時教授就知道他不想再講下去了,如果再講下...

2008就這樣過去

2008就這樣晃過去了,回憶這一年,沒有幹任何值得稱道的事。技術到了瓶頸,激情漸漸磨滅。日子似乎又回到了頹廢的大三大四,回到了頹廢的第一年工作時。上班 回家 遊戲 週末 遊戲 最近時不時開始發呆,懷疑是不是有點衰老的傾向。時不時想到現在的年齡,現在正是自己的 時間,按理不應該這樣頹廢,一再告訴自己,...

就這樣單身吧

春季上海的天氣就是這樣的變化無常,陰雨摻合著涼風,不免讓人多了幾分感慨!望著窗外陰沉的天空,我突然間有了一種單身一輩子的衝動。呵呵,那應該是貴族般的生活,用不著考慮生活中過多瑣屑的煩惱,是件很舒服的事情吧!儘管老爸 老媽已經放出話來 不帶女友不准回家,我卻一直頂著不孝的罪名,仍舊是乙個人來乙個人去。...