zoukankan      html  css  js  c++  java
  • day 7-5 守护线程

    一. 守护线程

      无论是进程还是线程,都遵循:守护进程(线程)会等待主进程(线程)运行完毕后被销毁.

      需要强调的是:运行完毕并非终止运行.

      1、对主进程来说,运行完毕指的是主进程代码运行完毕.

      2、对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕.

      详细解释:

      1、主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束,

      2、主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收).因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,而进程必须保证非守护线程都运行完毕后才能结束

      

     1 from threading import Thread
     2 import time
     3 
     4 def task(name):
     5     print("%s is running"%name)
     6     time.sleep(2)
     7     print("%s is done"% name)
     8 
     9 
    10 if __name__ == '__main__':
    11     t1 = Thread(target=task,args=("线程1",))
    12     t1.daemon =True
    13     t1.start()
    14     print("主线程")
    15     print(t1.is_alive())

      上面第7行代码,永远都运行不到.这段代码里,只有一个主线程和线程1,且线程1是守护进程.那么根据刚刚的理论得知:主线程在等非守护线程运行结束后,才结束运行.但是这里并没有其他线程,所以主线运行完自己,就停止了.这时守护线程1,还在sleep中.但是由于线程1是守护线程,所以主线程结束后,线程1也跟着结束了.

  • 相关阅读:
    编写高性能Web应用程序的10个入门技巧
    C#中class与struct的区别[转]
    web架构设计经验分享 (转)
    NUnit入门篇
    sqlserver 重建日志文件
    ExecuteReader如何取得输出参数和返回值
    防止表单重复提交的几种方案
    Web 2.0 versus Virtual Worlds (转)
    ActionScript 3.0 Step By Step系列(七):使用XML和XMLList类处理XML数据 (转)
    PlayButton Component
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9280030.html
Copyright © 2011-2022 走看看