zoukankan      html  css  js  c++  java
  • 54_并发编程-线程-守护线程

    一、守护线程
     
      1. 对主进程来说,运行完毕指的是主进程代码运行完毕
      2. 对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕
      
      详解:
      1、主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束
      2、主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收)。因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,而进程必须保证非守护线程都运行完毕后才能结束,因为进程执行结束是要回收资源的,所有必须确保你里面的非守护子线程全部执行完毕。
     1 # 守护线程 - 主线程等待的是非守护进程结束
     2 import time
     3 from threading import Thread
     4 from multiprocessing import Process
     5 
     6 def func1():
     7     time.sleep(1)
     8     print('func1')
     9 
    10 def func2():
    11     time.sleep(2)
    12     print('func2')
    13 
    14 if __name__ == '__main__':
    15 
    16     # 主线程会等待非守护线程结束后,主线程才结束,所以守护线程时间早就运行完毕会打印,主线程/func1/func2
    17     t = Thread(target=func1)
    18     t.daemon = True
    19     t.start()
    20 
    21     t = Thread(target=func2,)
    22     t.start()
    23     print('主进程')
    24 
    25     # 主进程是等待给非守护进程收尸,主进程已结束,所以守护进程也会结束,打印主进程/func2;  相当于主进程的代码运行完,守护进程结束,而主进程没有死
    26     t = Process(target=func1)
    27     t.daemon = True        # t.setDaemon(True) 也可,必须在t.start()之前设置
    28     t.start()
    29 
    30     t = Process(target=func2,)
    31     t.start()
    32     print('主进程')
    代码实例
  • 相关阅读:
    centos7 python3.5中引入sqlite3
    转载nginx+uwsgi+django
    浮点数计算精度丢失问题#W01
    五大JavaScript 自动化测试框架
    deepin 安装Samba并设置为开机启动
    搭建macaca android环境
    open-MAT 安装部署
    基于Jmeter BackEnd+InfluxDB+Grafana实现性能指标实时可视监控
    使用开源libimobiledevice查看iphone信息
    Java 开发者必备测试框架
  • 原文地址:https://www.cnblogs.com/hq82/p/9876091.html
Copyright © 2011-2022 走看看