- 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()