zoukankan      html  css  js  c++  java
  • Python程序中的线程操作-守护线程

    无论是进程还是线程,都遵循:守护XX会等待主XX运行完毕后销毁。
    需要强调的是:运行完毕并非终止运行。
    对主进程来说,运行完毕指的是主进程代码运行完毕
    对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕。
     
    1.1详细解释
    主进程在其代码结束后就已经算运行完毕了(守护进程在此就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束。
    主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收)。因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,而进程必须保证非守护线程都运行完毕后才能结束。
    1.2守护线程例1
    from threading import Thread
    import time
    def sayhi(name):
        time.sleep(2)
        print('%s say hello' %name)
     
    if __name__ == '__main__':
        t=Thread(target=sayhi,args=('nick',))
        t.setDaemon(True) #必须在t.start()之前设置
        t.start()
     
        print('主线程')
        print(t.is_alive())
    outputs
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    主线程
    True
    macname@MacdeMacBook-Pro py %

    等待所有子线程结束
     
    from threading import Thread
    import time
     
    def foo():
        print(123)
        time.sleep(1)
        print("end123")
     
    def bar():
        print(456)
        time.sleep(3)
        print("end456")
     
    t1 = Thread(target=foo)
    t2 = Thread(target=bar)
     
    t1.daemon = True
    t1.start()
    t2.start()
    print("main-------")
     
    outputs
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    123
    456
    main-------
    end123
    end456
    macname@MacdeMacBook-Pro py %
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    iOS微信打开App
    HTTP请求中的Form Data与Request Payload的区别
    iPhone设备分辨率一览
    iOS JS与原生交互(全集)
    iOS与导航相关的都在这
    iOS论App推送方案
    iOS接收远程通知响应方法
    iOS10以前的本地通知和远程通知
    手写一个MVVM
    react组件中返回并列元素的方法
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14193627.html
Copyright © 2011-2022 走看看