一、 例子:我們對傳參是有要求的必須傳入一個元組,否則報錯 二、 二、threading的使用 直接利用threading.Thread生成Thread的實例 格式: t= threading.Thread(target=函數體,args=(,))#參數args要傳遞元組 t.start()#啟動 ...
一、 例子:我們對傳參是有要求的必須傳入一個元組,否則報錯
二、
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()#等待多線程執行完成
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()
從上面可以看出來,我們啟動了兩個線程,但是這兩個線程執行完了才列印最後一個結束語句。
2.守護線程
格式:線程.setDaemon(True)
作用:
(1)如果在程式中將子線程設置為守護線程,則子線程會在主線程結束的時候自動退出;
(2)一般認為,守護線程不重要或者不允許脫離子線程而獨立運行;
(3)守護線程能否有效果和環境有關係
註意點:該語句一定要寫在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")後,我們的子線程的最後一個列印沒有出來,程式就結束了,說明主線程結束,子線程無論執行到哪裡都會被kill掉,和我們的預期一樣。
三、源碼
d24_2_usage_of_threading.py
地址:https://github.com/ruigege66/Python_learning/blob/master/d24_2_usage_of_threading.py
2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,後臺回覆”禮包“,獲取大數據學習資料