Python 7天快速入門完整視頻教程:https://www.bilibili.com/video/BV1o84y1Z7J1
Python 通過threading模塊實現(xiàn)多線程
我們可以使用threading模塊的Thread類的構(gòu)造器來創(chuàng)建線程
def _ init _(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None):
上面的構(gòu)造器涉及如下幾個參數(shù)。
group:指定該線程所屬的線程組。目前該參數(shù)還未實現(xiàn),因此它只能設(shè)為None。
target:指定該線程要調(diào)度的目標方法。
name:線程名稱,一般不用設(shè)置
args:指定一個元組,以位置參數(shù)的形式為 target 指定的函數(shù)傳入?yún)?shù)。元組的第一個元素傳給target函數(shù)的第一個參數(shù),元組的第二個元素傳給target函數(shù)的第二個參數(shù)……依此類推。
kwargs:指定一個字典,以關(guān)鍵字參數(shù)的形式為target 指定的函數(shù)傳入?yún)?shù)。
daemon:指定所構(gòu)建的線程是否為后代線程。
我們看下實例:
import time
def wishing():
while True:
print("洗菜菜...啦啦啦")
time.sleep(1)
def cooking():
while True:
print("燒飯,燒菜...啦啦啦")
time.sleep(1)
if __name__ == '__main__':
wishing()
cooking()
運行輸出的,一直是洗菜。
如果我們不用多線程,無法實現(xiàn)兩個任務(wù)一起執(zhí)行。
我們使用多線程實現(xiàn)代碼:
import threading
import time
def wishing():
while True:
print("洗菜菜...啦啦啦")
time.sleep(1)
def cooking():
while True:
print("煮飯,燒菜...啦啦啦")
time.sleep(1)
if __name__ == '__main__':
# 創(chuàng)建洗菜線程
wishing_thread = threading.Thread(target=wishing)
# 創(chuàng)建煮飯,燒菜線程
cooking_thread = threading.Thread(target=cooking)
# 啟動線程
wishing_thread.start()
cooking_thread.start()
傳參:
import threading
import time
def wishing(msg):
while True:
print(msg)
time.sleep(1)
def cooking(msg):
while True:
print(msg)
time.sleep(1)
if __name__ == '__main__':
# 創(chuàng)建洗菜線程
wishing_thread = threading.Thread(target=wishing, args=("洗菜菜...啦啦啦",))
# 創(chuàng)建煮飯,燒菜線程
cooking_thread = threading.Thread(target=cooking, kwargs={"msg": "煮飯,燒菜...啦啦啦"})
# 啟動線程
wishing_thread.start()
cooking_thread.start()