文章目錄
- 執行緒概念
- 1. 執行緒的介紹
- 2. 執行緒的概念
- 3. 執行緒的作用
- 多執行緒的使用
- 1. 匯入執行緒模塊
- 2. 執行緒類Thread引數說明
- 3. 啟動執行緒
- 4. 多執行緒完成多任務的代碼
- 執行緒執行帶有引數的任務
- 1. 執行緒執行帶有引數的任務的介紹
- 2. args引數的使用
- 3. kwargs引數的使用
- 執行緒注意事項
執行緒概念
1. 執行緒的介紹
在Python中,想要實作多任務除了使用行程,還可以使用執行緒來完成,執行緒是實作多任務的另外一種方式,
2. 執行緒的概念
執行緒是行程中執行代碼的一個分支,每個執行分支(執行緒)要想作業執行代碼需要cpu進行調度 ,也就是說執行緒是cpu調度的基本單位,每個行程至少都有一個執行緒,而這個執行緒就是我們通常說的主執行緒,
3. 執行緒的作用
多執行緒可以完成多任務
多執行緒效果圖:

多執行緒的使用
1. 匯入執行緒模塊
#匯入執行緒模塊
import threading
2. 執行緒類Thread引數說明
Thread([group [, target [, name [, args [, kwargs]]]]])
- group: 執行緒組,目前只能使用None
- target: 執行的目標任務名
- args: 以元組的方式給執行任務傳參
- kwargs: 以字典方式給執行任務傳參
- name: 執行緒名,一般不用設定
3. 啟動執行緒
啟動執行緒使用start方法
4. 多執行緒完成多任務的代碼
import threading
import time
# 唱歌任務
def sing():
# 擴展: 獲取當前執行緒
# print("sing當前執行的執行緒為:", threading.current_thread())
for i in range(3):
print("正在唱歌...%d" % i)
time.sleep(1)
# 跳舞任務
def dance():
# 擴展: 獲取當前執行緒
# print("dance當前執行的執行緒為:", threading.current_thread())
for i in range(3):
print("正在跳舞...%d" % i)
time.sleep(1)
if __name__ == '__main__':
# 擴展: 獲取當前執行緒
# print("當前執行的執行緒為:", threading.current_thread())
# 創建唱歌的執行緒
# target: 執行緒執行的函式名
sing_thread = threading.Thread(target=sing)
# 創建跳舞的執行緒
dance_thread = threading.Thread(target=dance)
# 開啟執行緒
sing_thread.start()
dance_thread.start()
執行結果:
正在唱歌...0
正在跳舞...0
正在唱歌...1
正在跳舞...1
正在唱歌...2
正在跳舞...2
執行緒執行帶有引數的任務
1. 執行緒執行帶有引數的任務的介紹
前面我們使用執行緒執行的任務是沒有引數的,假如我們使用執行緒執行的任務帶有引數,如何給函式傳參呢?
Thread類執行任務并給任務傳引數有兩種方式:
args 表示以元組的方式給執行任務傳參
kwargs 表示以字典方式給執行任務傳參
2. args引數的使用
示例代碼:
import threading
import time
# 帶有引數的任務
def task(count):
for i in range(count):
print("任務執行中..")
time.sleep(0.2)
else:
print("任務執行完成")
if __name__ == '__main__':
# 創建子執行緒
# args: 以元組的方式給任務傳入引數
sub_thread = threading.Thread(target=task, args=(5,))
sub_thread.start()
執行結果:
任務執行中…
任務執行中…
任務執行中…
任務執行中…
任務執行中…
任務執行完成
3. kwargs引數的使用
示例代碼:
import threading
import time
# 帶有引數的任務
def task(count):
for i in range(count):
print("任務執行中..")
time.sleep(0.2)
else:
print("任務執行完成")
if __name__ == '__main__':
# 創建子執行緒
# kwargs: 表示以字典方式傳入引數
sub_thread = threading.Thread(target=task, kwargs={"count": 3})
sub_thread.start()
執行結果:
任務執行中..
任務執行中..
任務執行中..
任務執行完成
執行緒注意事項
- 執行緒之間執行是無序的
- 主執行緒會等待所有的子執行緒執行結束再結束
- 執行緒之間共享全域變數
- 執行緒之間共享全域變數資料出現錯誤問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/181540.html
標籤:其他
