1. 程式人生 > 程式設計 >Python threading的使用方法解析

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:",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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。