python執行緒中join和和setDaemon
阿新 • • 發佈:2018-11-05
- join([timeout]) 主執行緒A中,建立子執行緒B,B呼叫join函式會使得主執行緒阻塞,直到子執行緒執行結束或超時。引數timeout是一個數值型別,用來表示超時時間,如果未提供該引數,那麼主調執行緒將一直阻塞直到子執行緒結束。
注意:必須在start() 方法呼叫之後設定。注意:必須在start() 方法呼叫之後設定。
import threading import time class MyThread(threading.Thread): def __init__(self, name): super(MyThread, self).__init__() self.num = 5 self.name = name def run(self): print(self.name, ':start') while self.num: self.num -= 1 time.sleep(1) print(self.name, ':over') def main(): t = MyThread('t') t.start() t.join() for i in range(5): print(i) print('main done!') if __name__ == '__main__': main() 輸出如下: t :start t :over 0 1 2 3 4 main done!
如果不加入第行的t.join()則輸出如下,主執行緒不會等待子執行緒,並且主執行緒執行完後子執行緒仍在執行。
t :start
0
1
2
3
4
main done!
t :over
- setDaemon()方法。主執行緒A中,建立子執行緒B,B呼叫setDaemon(),即把主線設定為守護執行緒,如果主執行緒執行結束,則不管子執行緒B是否完成,一併和主執行緒退出。
注意:必須在start() 方法呼叫之前設定。
import threading import time class MyThread(threading.Thread): def __init__(self, name): super(MyThread, self).__init__() self.num = 5 self.name = name def run(self): print(self.name, ':start') while self.num: self.num -= 1 time.sleep(1) print(self.name, ':over') def main(): t = MyThread('t') t.setDaemon(True) t.start() for i in range(5): print(i) print('main done!') if __name__ == '__main__': main()