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 此外还有:三个全局的比较有用:
获取当前存活的线程的对象列表
最后:结语下一节我将以实例介绍这些东西的使用
python Threading模块源码解析的更多相关文章
- python threading ThreadPoolExecutor源码解析
future: 未来对象,或task的返回容器 1. 当submit后: def submit(self, fn, *args, **kwargs): with self._shutdown_lock ...
- python threading Future源码解析
1. Future内部还是用了condition这个锁 2. Cancel # future在执行时,会一直更新这个状态 def cancel(self): """Can ...
- gorm的日志模块源码解析
gorm的日志模块源码解析 如何让gorm的日志按照我的格式进行输出 这个问题是<如何为gorm日志加traceId>之后,一个群里的朋友问我的.如何让gorm的sql日志不打印到控制台, ...
- 「从零单排canal 06」 instance模块源码解析
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_read ...
- 读懂掌握 Python logging 模块源码 (附带一些 example)
搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...
- php 日志模块源码解析
php日志模块设计 Monolog 是PHP的一个日志类库解析 整体介绍:monolog日志模块遵循 PSR3 的接口规范.主要有日志格式类接口(格式化日志信息),处理类接口(写日志的驱动,通过扩展写 ...
- 「从零单排canal 05」 server模块源码解析
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_read ...
- 「从零单排canal 07」 parser模块源码解析
基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_read ...
- C#软件授权、注册、加密、解密模块源码解析并制作注册机生成license
最近做了一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. ...
随机推荐
- alibaba工程师,如何解决乐观锁冲突问题?
很多做过电商系统的人应该知道,我们在设计电商系统中关于商品库存扣减时,在大部分情况下(并发量不高时),商品库存都可以直接在关系型数据库中进行扣减,那么在限时抢购活动正式开始后,那些单价比平时更给力.更 ...
- C#中的异步编程--探索await与async关键字的奥妙之处,原来理解和使用异步编程可以这么简单
前言 await与async是C#5.0推出的新语法,关于await与async有很多文章讲解.但看完后有没有这样一种感觉,感觉这东西像是不错,但好像就是看不太懂,也不清楚该怎么使用.虽然偶有接触,但 ...
- 剑指offer-面试题33-二叉搜索树的后序遍历序列-二叉树遍历
/* 题目: 给定一个序列,判断它是否为某个二叉搜索树的后序遍历. */ /* 思路: 二叉搜索树:左子树<根节点<右子树. 序列的最右端为根节点,小于根节点的左半部分为左子树,大于根节点 ...
- 数组工具Array的基本使用
/* * Arrays数组工具的基本使用 */import java.util.Arrays; public class Day02_03 { public static void main(S ...
- Mac IDEA 2019.3.1下载及破解,可激活至2089年
背景 目前IDEA已更新到2019.3.3,但是下载这个版本后使用目前网上的常见破解方法会出现各种问题.比如使用注册码方式提示license key is in legacy format,或者使用L ...
- STL-deque 双端数组简析
#include <iostream> #include <deque> using namespace std; int main() { // 插入 deque<in ...
- C#设计模式学习笔记:设计原则
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8287784.html,记录一下学习过程以备后续查用. 写代码也是有原则的,我们之所以使用设计模式,主要是为了 ...
- 【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型
// org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便 ...
- Python编辑器——Pycharm以及Sublime Text 3的安装教程
近来工作繁忙,顾不上学习,但还是有些小兄弟问我有没有编写Python代码的工具以及安装方法,跟我吐槽说他安装后总是有问题.那么今天就来说一说Pycharm的安装,顺带说一下Sublime Text 3 ...
- Bubble Sort HDU - 5775 树状数组
//每个数字只会被它后面的比它小的数字影响,且会向右移动相应个数的位置 //比如:6 4 3 5 2 1 .4后面比它小的有 三个,因此它的最右边位置就是当前位置 +3,即5 //如果该数字本身在标准 ...