Python编程之守护线程

1,382 阅读2分钟
什么是守护线程?什么是非守护线程?什么是线程同步?

文章目标:
搞懂Python中的上面三个问题

非守护线程
线程概念
当一个进程启动以后,默认会产生一个主线程,因为线程是程序执行的最小单位,在Python当中线程默认情况下就是setDaemon(False)(非守护线程),也就是主线程执行完自己的任务退出以后,子线程会继续执行自己的任务,不会随主线程退出受影响
案例
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
import threading
import time
def run():
time.sleep(2) # 延时等待2s
print('---子线程结束执行---')
def main():
t1 = threading.Thread(target=run)
t1.start()
print('---主线程结束执行---')
if __name__ == '__main__':
main()

输出
[Python]
纯文本查看
复制代码
1
2
---主线程结束执行---
---子线程结束执行---

总结:非守护线程,子线程不随主线程结束而立马结束,而是继续执行
守护线程

当守护线程时,子线程会守护主线程,主线程一旦退出,全部子线程都会被强制终止
案例
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
import threading
import time
def run():
time.sleep(2)
print('---子线程结束---')
def main():
t1 = threading.Thread(target=run)
t1.setDaemon(True) # 设置子线程守护主线程
t1.start()
print('---主线程结束---')
if __name__ == '__main__':
main()

输出
[Python]
纯文本查看
复制代码
1
---主线程结束---

线程同步

线程同步就是让线程处于堵塞状态,等待子线程执行以后主线程再执行,也可以设置堵塞时间
案例(主线程堵塞,等待子线程结束以后再执行)
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
import threading
import time
def run():
time.sleep(2)
print('---子线程结束---')
def main():
t1 = threading.Thread(target=run)
t1.start()
t1.join() # 主线程堵塞
print('---主线程结束---')
if __name__ == '__main__':
main()

输出
[Python]
纯文本查看
复制代码
1
2
---子线程结束---
---主线程结束---

案例(主线程堵塞1s,主线程继续执行)
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
import threading
import time
def run():
time.sleep(2)
print('---子线程结束---')
def main():
t1 = threading.Thread(target=run)
t1.start()
t1.join(timeout=1) # 主线程堵塞1s
print('---主线程结束---')
if __name__ == '__main__':
main()

输出
[Python]
纯文本查看
复制代码
1
2
---主线程结束---
---子线程结束---

更多学习资料可关注:itheimaGZ获取