python中的主线程和子线程
今天上课的时候听老师说到线程方面的知识:在主线程结束后子线程都会被强制终止(老师讲课用的是C语言)。
但是我回想起我之前用python进行线程操作的时候并不是这样,主线程执行完后子线程仍然可以继续执行。
在网上查找资料后发现python线程中有一个setDaemon()方法。
一、 默认情况下,当python创建了一个进程,会产生一个主线程,此时setDaemon()方法默认为setDaemon(False),即主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,相当于在程序末尾加入了join()方法。
例子:
import threading
import time
def thread():
time.sleep(2)
print('---子线程结束---')
def main():
t1 = threading.Thread(target=thread)
#t1.setDaemon(True) #当我们使用setDaemon(True)时,这是子线程为守护线程,主线程一旦执行结束,则全部子线程被强制终止
t1.start()
print('---主线程结束---')
if __name__ == '__main__':
main()
输出:
二、 当我们使用setDaemon(True)时,这时子线程被设置为守护线程,主线程一旦执行结束,则全部子线程被强制终止,这是与jion()相反的。要注意的是,此方法必须在start()方法调用之前设置。
例子:
import threading
import time
def thread():
time.sleep(2)
print('---子线程结束---')
def main():
t1 = threading.Thread(target=thread)
t1.setDaemon(True) #当我们使用setDaemon(True)时,这是子线程为守护线程,主线程一旦执行结束,则全部子线程被强制终止
t1.start()
print('---主线程结束---')
if __name__ == '__main__':
main()
输出: