什么是守护线程?什么是非守护线程?什么是线程同步?
文章目标:搞懂Python中的上面三个问题
非守护线程
线程概念当一个进程启动以后,默认会产生一个主线程,因为线程是程序执行的最小单位,在Python当中线程默认情况下就是setDaemon(False)(非守护线程),也就是主线程执行完自己的任务退出以后,子线程会继续执行自己的任务,不会随主线程退出受影响 案例[Python] 纯文本查看 复制代码 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] 纯文本查看 复制代码 ---主线程结束执行---
---子线程结束执行---
总结:非守护线程,子线程不随主线程结束而立马结束,而是继续执行
守护线程
当守护线程时,子线程会守护主线程,主线程一旦退出,全部子线程都会被强制终止 案例[Python] 纯文本查看 复制代码 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] 纯文本查看 复制代码 ---主线程结束---
线程同步
线程同步就是让线程处于堵塞状态,等待子线程执行以后主线程再执行,也可以设置堵塞时间 案例(主线程堵塞,等待子线程结束以后再执行)[Python] 纯文本查看 复制代码 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] 纯文本查看 复制代码 ---子线程结束---
---主线程结束---
案例(主线程堵塞1s,主线程继续执行)[Python] 纯文本查看 复制代码 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] 纯文本查看 复制代码 ---主线程结束---
---子线程结束---
|