zoukankan      html  css  js  c++  java
  • python Threading模块源码解析

    查看源码:

     这是一个线程控制的类,这个类可以被子类化(继承)在一定的条件限制下,这里有两种方式去明确活动:第一通过传入一个callable 对象也就是调用对象,一种是通过重写这个Thread类的run方法

    def  add():

       pass

    print(callable(add))
    从的上面实现多线程方式可以看出要理解Thread类的实现,我们主要看下构造函数__init__()和run方法这两部分核心代码就可以明白如何清晰的去使用这threading.Thread类的调用实现多线程:
    2.1先看下构造函数的参数:
    主要包含如下几个:
    group: 参数指出是作为一个future extend 未来开发的拓展实现线程组的参数
    target :需要传入的是一个可以被run方法调用的可调用对象 callable object
    name: 是一个线程名字这里没有指定类型可以str,int一般当然你也可以在子类继承Thread类的时候使用super初始化一个name如:
    super(SubClass,self).__init(name="ThreadName")
    args用来解包参数的就不介绍了(a,b)或者*list1,或者(a,)等等
    **kwargs 关键字参数,我用的比较少
    最后一句很人性化,提醒你在进行subclass 子类覆盖了构造函数的时候,请确保线程在调用前进行了父类构造函数Thread.__init__(ParentclassVar)的初始化对于任何线程:
    第一种写法
    def __init__():
    Thread.__init__(Parent_var) # python2写法 ,but now is less readable
    super(Subclass,self).___init(Parent_var)<===> super().__init(Parent_var) # python3写法

     除了以上的显示参数以外,还有通过@property,定义的参数:

    @property
    def name(self):
    线程名
    @property
    def ident(self):
    线程标识符
    @property
    def daemon(self):
    守护线程

    此外:is_alive用来判断线程是否存活

     线程和守护线程daemon名称设置获取:

    def isDaemon(self):
    return self.daemon

    def setDaemon(self, daemonic):
    self.daemon = daemonic

    def getName(self):
    return self.name

    def setName(self, name):
    self.name = name

    此外还有:三个全局的比较有用:

     获取当前存活的线程的对象列表

     最后:结语下一节我将以实例介绍这些东西的使用

  • 相关阅读:
    2716 [Violet 3] 天使玩偶
    BZOJ1017魔兽地图DotR 樹形DP
    BZOJ1016最小生成树计数 最小生成树 + 排列组合
    BZOJ1014火星人prefix Splay維護序列 + 字符串哈希
    BZOJ1010玩具裝箱Toy
    BZOJ1009GT考试 DP + KMP + 矩陣快速冪
    BZOJ1008[HNOI2008]越狱
    BZOJ1006神奇的国度 弦圖染色 最大勢算法
    BZOJ1005明明的烦恼 Prufer + 分解質因數 + 高精度
    poj2182(线段树求序列第k小)
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/12309410.html
Copyright © 2011-2022 走看看