python线程中join和和setDaemon

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

猜你喜欢

转载自blog.csdn.net/qq_29666899/article/details/83592135