zoukankan      html  css  js  c++  java
  • Python线程:线程的调度-守护线程

    Python线程:线程的调度-守护线程
     
    守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。在python中建议使用的是thread.demon = true 使用这个方法可以检测数据合法性
     
    守护线程使用的情况较少,但并非无用,举例来说,Python的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。
     
    setDaemon方法的详细说明:
    # 属性进行封装 以方便对数据传入值合法性进行判断
    @daemon.setter   # 将self._daemonic 
        def daemon(self, daemonic):
            if not self._initialized:
                raise RuntimeError("Thread.__init__() not called")
            if self._started.is_set():
                raise RuntimeError("cannot set daemon status of active thread")
            self._daemonic = daemonic
          
        # 判断此线程是否是守护线程
        def isDaemon(self):
            return self.daemon
    
        #通过方法修改daemonic属性值  不建议使用
        def setDaemon(self, daemonic):
            self.daemon = daemonic
     1 # encoding:utf-8
     2 # Author:"richie"
     3 # Date:8/29/2017
     4 # python线程:线程的调度-守护线程
     5 
     6 from threading import Thread,Timer
     7 import time
     8 
     9 class MyCommon(Thread):
    10 
    11     def run(self):
    12         for i in range(1,5):
    13             t = Timer(7, self.print_msg, args=(i,))
    14             t.start()
    15 
    16     def print_msg(self,i):
    17         print("线程1第" + str(i) + "次执行!")
    18 
    19 class MyDaemon(Thread):
    20     """
    21     守护线程不可以在重新new thread
    22     """
    23     def run(self):
    24         for i in range(9999999):
    25             print("后台线程第" + str(i) + "次执行!")
    26             time.sleep(2)
    27 
    28 if __name__ == '__main__':
    29     t1 = MyCommon()
    30     t2 = MyDaemon()
    31     t2.deamon = True # 设置为守护线程  
    32     t1.start()
    33     t2.start()
    D:PythonPython3.6python.exe D:/Python/PythonProgram/day35/案例分析.py
    后台线程第0次执行!
    后台线程第1次执行!
    后台线程第2次执行!
    后台线程第3次执行!
    线程1第1次执行!
    线程1第2次执行!
    线程1第3次执行!
    线程1第4次执行!
    
    Process finished with exit code 0
    从上面的执行结果可以看出:
    前台线程是保证执行完毕的,后台线程还没有执行完毕就退出了。
     
    实际上:python解释器判断程序是否执行结束的标准是所有的前台执线程行完毕了,而不管后台线程的状态,因此,在使用后台县城时候一定要注意这个问题。
  • 相关阅读:
    修改表结构
    enum/set 约束
    MYSQL 数据类型
    表和数据的基础操作
    存储引擎
    mysql
    HTML 介绍
    selor模块
    select
    协程
  • 原文地址:https://www.cnblogs.com/richiewlq/p/7447604.html
Copyright © 2011-2022 走看看