zoukankan      html  css  js  c++  java
  • python 多线程 t.setDaemon(True):

    t.setDaemon(True):
    
    #coding=utf-8
    import threading
    from time import ctime,sleep
    
    
    def music(func):
        for i in range(5):
            print "I was listening to %s. %s" %(func,ctime())
            #print threading.currentThread()
            sleep(2)
    
    def move(func):
        for i in range(2):
            print "I was at the %s! %s" %(func,ctime())
            #print threading.currentThread()
            sleep(50)
    
    threads = []
    t1 = threading.Thread(target=music,args=(u'爱情买卖',))
    threads.append(t1)
    t2 = threading.Thread(target=move,args=(u'阿凡达',))
    threads.append(t2)
    
    if __name__ == '__main__':
        for t in threads:
            t.setDaemon(True)
            t.start()
            #print threading.currentThread()
        print "all over %s" %ctime()
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/thread/p7.py
    I was listening to 爱情买卖. Thu Sep 07 14:27:02 2017
    I was at the 阿凡达! Thu Sep 07 14:27:02 2017
     all over Thu Sep 07 14:27:02 2017
    
    Process finished with exit code 0
    ----------------------------------------------------------------------------------
    
    #coding=utf-8
    import threading
    from time import ctime,sleep
    
    
    def music(func):
        for i in range(5):
            print "I was listening to %s. %s" %(func,ctime())
            #print threading.currentThread()
            sleep(2)
    
    def move(func):
        for i in range(2):
            print "I was at the %s! %s" %(func,ctime())
            #print threading.currentThread()
            sleep(50)
    
    threads = []
    t1 = threading.Thread(target=music,args=(u'爱情买卖',))
    threads.append(t1)
    t2 = threading.Thread(target=move,args=(u'阿凡达',))
    threads.append(t2)
    
    if __name__ == '__main__':
        for t in threads:
            #t.setDaemon(True)
            t.start()
            #print threading.currentThread()
        print "all over %s" %ctime()
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/thread/p7.py
    I was listening to 爱情买卖. Thu Sep 07 14:24:58 2017
    I was at the 阿凡达! Thu Sep 07 14:24:58 2017
    all over Thu Sep 07 14:24:58 2017
    I was listening to 爱情买卖. Thu Sep 07 14:25:00 2017
    I was listening to 爱情买卖. Thu Sep 07 14:25:02 2017
    I was listening to 爱情买卖. Thu Sep 07 14:25:04 2017
    I was listening to 爱情买卖. Thu Sep 07 14:25:06 2017
    I was at the 阿凡达! Thu Sep 07 14:25:48 2017
    
    Process finished with exit code 0
    
    
     setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。
    
    子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句print "all over %s" %ctime()后,没有等待子线程,直接就退出了,同时子线程也一同结束。
    
    从执行结果来看,子线程(muisc 、move )和主线程(print "all over %s" %ctime())都是同一时间启动,
    
    但由于主线程执行完结束,所以导致子线程也终止。 
    
    
    
    一个布尔值表明是否这个线程是一个daemon 线程(True) or not (False).
    
    这个必须是设置在start()被调用前,否则错误会被抛出。
    
    它的初始值是从创建线程中继承而来, 主线程不是一个daemon线程 因此
    
    所有的线程创建在主线程默认 daemon =False
    
    
    
    setDaemon()方法。主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(),这个的意思是,把主线程A设置为守护线程,
    
    这时候,要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出.这就是setDaemon方法的含义
    
    
    主线程退出,不管子线程是否完成,一并退出
    
    
    
    但是有时候我们需要的是,只要主线程完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以用setDaemon方法了。
    

  • 相关阅读:
    JAVA向上转型和向下转型
    LeetCode记录之9——Palindrome Number
    LeetCode记录之7——Reverse Integer
    JAVA数据结构--插入排序
    JAVA数据结构--选择排序
    JAVA数据结构--冒泡排序
    HTTP协议04-返回状态码
    HTTP协议03-http特点及请求方式
    HTTP协议02-请求和响应的报文构成
    HTTP笔记01-http相关的基础知识
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349549.html
Copyright © 2011-2022 走看看