zoukankan      html  css  js  c++  java
  • 线程与进程3-守护线程

    join(),等待子线程执行完了,主线程才继续往下执行,等所有线程执行完了,才退出程序。

    当把子线程变成守护线程以后,只要主线程(非守护线程)执行完就退出程序,不管子线程完了没完。

    主线程没法设置成守护线程。

    #主线程启动子线程之后,两者是并行的,相互之间是独立的。
    import threading,time
    
    def run(n):
        print('task',n)
        time.sleep(2)
        print('task done',threading.current_thread()) #打印当前线程是主线程还是子线程
    
    start_time=time.time()
    t_objs=[]
    
    for i in range(10):
        t=threading.Thread(target=run,args=("t-%s"%i,))
        t.setDaemon(True) #把当前线程设置为守护线程,一定要在start之前设置。
        t.start()
        t_objs.append(t)
    
    print('----All threads has finished',threading.current_thread(),threading.active_count())
    print("Cost time is:",time.time()-start_time)
    

     运行结果,没有等待子线程(守护线程)的sleep的2S,而是直接结束了程序了。

    没有看到print('task done',threading.current_thread()) 的输出,证明守护线程被强制关闭了。

    task t-0
    task t-1
    task t-2
    task t-3
    task t-4
    task t-5
    task t-6
    task t-7
    task t-8
    task t-9
    ----All threads has finished <_MainThread(MainThread, started 11936)> 11
    Cost time is: 0.0010001659393310547
    
    Process finished with exit code 0
    
  • 相关阅读:
    PHP:面向对象学习笔记,重点模拟Mixin(掺入)
    Mybatis Plus 更新
    Mybatis Plus 自定义SQL和分页插件
    Mybatis Plus 查询方法
    Mybatis Plus 快速入门
    Ribbon 负载均衡服务调用
    三个注册中心异同点
    Consul 服务注册与发现
    Spring Boot 集成 Swagger
    Eureka 服务注册与发现
  • 原文地址:https://www.cnblogs.com/momo8238/p/7345276.html
Copyright © 2011-2022 走看看