Python threading的使用方法解析
一、 例子:我們對傳參是有要求的必須傳入一個元組,否則報錯
import _thread as thread
import time
def loop1(in1):
print("Start loop 1 at:", time.ctime())
print("我是參數", in1)
time.sleep(4)
print("End loop 1 at:", time.ctime())
def loop2(in1, in2):
print("Start loop 2 at:", time.ctime())
print("我是參數", in1, "和參數 ", in2)
time.sleep(4)
print("End loop 1 at:", time.ctime())
def main():
print("Starting at:", time.ctime())
thread.start_new_thread(loop1, ("liuming", ))
# 上面我們傳參的時候, 我用的是:(“ liuming”), 這里面是沒有逗號的, 結果編譯報錯, 告訴我, 這里面必須傳入元組
# 因此, 我才在里面加了一個逗號, 使其變成一個元組
thread.start_new_thread(loop2, ("zhanglei", "liuhao"))
print("All done at:", time.ctime())
if __name__ == "__main__":
main()
while True:
time.sleep(10)

二、threading的使用
直接利用threading.Thread生成Thread的實例
格式:
t= threading.Thread(target=函數體,args=(,))#參數args要傳遞元組
t.start()#啟動多線程
t.join()#等待多線程執(zhí)行完成
def main():
print("Start at :", time.ctime())
t1 = threading.Thread(target = loop1, args = ("王老大", ))
t1.start()# 啟動多線程
t2 = threading.Thread(target = loop2, args = ("孫子", "好嗎"))
t2.start()
t1.join()
t2.join()
print("End at :", time.ctime())
if __name__ == "__main__":
main()

從上面可以看出來,我們啟動了兩個線程,但是這兩個線程執(zhí)行完了才打印最后一個結束語句。
2.守護線程
格式:線程.setDaemon(True)
作用:
(1)如果在程序中將子線程設置為守護線程,則子線程會在主線程結束的時候自動退出;
(2)一般認為,守護線程不重要或者不允許脫離子線程而獨立運行;
(3)守護線程能否有效果和環(huán)境有關系
注意點:該語句一定要寫在start語句之前,否則就會把子程序無限時間掛起,運行報錯,如:

def fun():
print("Start fun")
time.sleep(2)
print("End fun")
print('Main thread')
t3 = threading.Thread(target = fun, args = ())
t3.setDaemon(True)
t3.start()
time.sleep(1)
print("Main thread End")

解釋:我們可以看出主線程結束后(即打印完了”Main thread End")后,我們的子線程的最后一個打印沒有出來,程序就結束了,說明主線程結束,子線程無論執(zhí)行到哪里都會被kill掉,和我們的預期一樣。
三、源碼
d24_2_usage_of_threading.py
地址:https://github.com/ruigege66/Python_learning/blob/master/d24_2_usage_of_threading.py
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python報錯ImportError: No module named ‘mi
在 Python 開發(fā)過程中,報錯是常有的事,而當遇到“ImportError: No module named ‘missing_module’”這樣的報錯時,可能會讓開發(fā)者感到困惑和苦惱,本文將深入探討這個報錯的原因和解決方法,幫助開發(fā)者快速解決這個問題,需要的朋友可以參考下2024-10-10
pandas時間序列之如何將int轉換成datetime格式
這篇文章主要介紹了pandas時間序列之如何將int轉換成datetime格式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Pycharm運行程序時,控制臺輸出PyDev?console:starting問題
Pycharm運行程序時,控制臺輸出PyDev?console:starting問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05

