Python的并发并行[1] -> 线程[0] -> threading 模块
threading模块 / threading Module
1 常量 / Constants
Pass
2 函数 / Function
2.1 setprofile()函数
函数调用: threading.setprofile(func)
函数功能:为所有线程设置一个profile函数
传入参数: func
func: method类型,
返回参数: 无
2.2 settrace()函数
函数调用: threading.settrace(func)
函数功能:为所有线程设置一个trace函数
传入参数: func
func: method类型,
返回参数: 无
2.3 active_count()函数
函数调用: num = threading.active_count()
函数功能:返回当前活动的线程个数
传入参数: 无
返回参数: num
num: int类型,当前活动的线程个数
2.4 current_thread()函数
函数调用: cthr = threading.current_thread()
函数功能:返回当前运行的线程
传入参数: 无
返回参数: cthr
cthr: instance类型,当前运行的线程的实例或一个DummyThread
2.5 enumerate()函数
函数调用: thr_list = threading.enumerate()
函数功能:返回当前活动的线程对象列表
传入参数: 无
返回参数: thr_list
thr_list: list类型,列表包含当前活动的所有线程对象
2.6 stack_size()函数
函数调用: size = threading.stack_size()
函数功能:返回新建线程的栈大小
传入参数: 无
返回参数: size
size: int类型,新线程栈的大小
3 类 / Class
3.1 Thread类
类实例化:thr = threading.Thread(group=None, target=None, name=None, args=(), daemon=None)
类的功能: 用于生成一个新的线程实例
传入参数: group, target, name, args, daemon
group: NoneType类型,目前仅支持为None
target: obj/func类型,需要可调用
name: str类型,线程的名称,为None则线程会根据生成的顺序自动赋予名字
args: tuple类型,传给target的参数(还有kwargs未注出)
daemon: bool类型,设置是否为守护线程
返回参数: thr
thr: instance类型,生成的新的线程实例
3.1.1 name属性方法
属性调用: n = thr.name / thr.name = n
属性功能: 返回线程的名称 / 设置线程的名称
属性参数: n
n: str类型,线程的名称
3.1.2 ident属性方法
属性调用: i = thr.ident
属性功能: 返回线程的标识符
属性参数: i
i: str/NoneType类型,线程的标识符
3.1.3 daemon属性方法
属性调用: thr.daemon / thr.daemon = b
属性功能: 返回线程的守护线程标识 / 设置守护线程标识
属性参数: b
b: bool类型,线程的守护线程标识,True表示为守护线程
3.1.4 start()方法
函数调用: thr.start()
函数功能:开始执行该线程
传入参数: 无
返回参数: 无
3.1.5 run()方法
函数调用: thr.run() / thr.start()
函数功能:线程的功能函数,线程开始时执行,通常在子类中被用户重定义,一般通过start()函数调用
传入参数: 无
返回参数: 无
3.1.6 join()方法
函数调用: thr.join(timeout=None)
函数功能:使线程挂起,除非给出timeout,否则一直阻塞,直至启动的线程全部结束
传入参数: timeout
timeout: None/int类型,设置阻塞超时时间(s)
返回参数: 无
3.1.7 is_alive()方法
函数调用: s = thr.is_alive()
函数功能:查看线程是否处在运行状态
传入参数: 无
返回参数: s
s: bool类型,线程是否在运行中,True则运行中,False则停止
3.2 Lock/RLock类
类实例化:lock = threading.Lock()/RLock()
类的功能:用于生成(可重入锁)线程锁,对于Lock,其本质是由threading._allocate_lock(由_thread.allocate_lock重命名而来)赋值得到,可通过help(threading.Lock)查看
传入参数: 无
返回参数: lock
lock: instance类型,生成的(可重入锁)线程锁实例
3.2.1 acquire()方法
函数调用: lock.acquire()
函数功能:获得线程锁,使资源被锁定,其他线程无法访问
传入参数: 无
返回参数: 无
3.2.2 release()方法
函数调用: lock.release()
函数功能:释放线程锁,使资源解锁可被其他线程使用
传入参数: 无
返回参数: 无
3.3 Semaphore / BoundedSemaphore类
类实例化:sep = threading.Semaphore(value=1)/BoundedSemaphore(value=1)
类的功能:生成一个(有界)信号量的实例。对于(有界)信号量来说,内部管理着一个计数器,计数器的初始值由value传入,默认为1,调用acquire()函数会使计数器-1,调用release()函数会使计数器+1,对于信号量来说,计数器值永远不会小于0,当计数器为0时,再调用acquire()函数则会阻塞,等待其他线程release。而对于BoundedSemaphore,则多了一个上限值,即计数器的值不能超过初始值value,否则会抛出一个ValueError(计数器release次数过多,意味着可能存在bug)。Semaphore中同样支持上下文管理协议。
传入参数: value
value: int类型,初始信号量数,用于设置内部计数器初始值
返回参数: sep
sep: instance类型,信号量实例
3.3.1 _value属性
属性调用: value = sep._value
属性功能: 返回当前信号量可用数(可供acquire()-1的数量)
属性参数: value
value: int类型,可用信号量的剩余值
3.3.2 acquire()方法
函数调用: sep.acquire(blocking=True, timeout=None)
函数功能:获取信号量,会使信号量计数器-1
传入参数: blocking, timeout
blocking: bool类型,用于设置是否阻塞等待,为True则当计数器为0时,会阻塞等待计数器,直到其他线程调用release()方法使计数器为正。若为False则不会进行阻塞等待,当计数器为0时,返回False
timeout: int类型,用于设置阻塞超时,当阻塞时间超过timeout时,返回False
返回参数: 无
3.3.3 release()方法
函数调用: sep.release()
函数功能:释放信号量,会使信号量计数器+1
传入参数: 无
返回参数: 无
3.4 Condition类
类实例化:cond = threading.Condition(lock=None)
类的功能:生成一个条件变量,用于进行等待唤醒控制
传入参数: lock
lock: instance类型,锁的实例,用于替换内置的RLock锁
返回参数: cond
cond: instance类型,生成的一个条件控制变量实例
3.4.1 acquire属性
属性调用: cond.acquire()
属性功能: 其本质是Condition内置锁的acquire函数,源码中在初始化时指向了Condition的类实例属性cond.acquire,因此可以直接对实例属性进行调用,获取锁权限
属性参数: acquire
acquire: function类型,是Condition内置锁的acquire方法
3.4.2 release属性
属性调用: cond.release()
属性功能: 其本质是Condition内置锁的release函数,源码中在初始化时指向了Condition的类实例属性cond.release,因此可以直接对实例属性进行调用,释放锁权限
属性参数: release
release: function类型,是Condition内置锁的release方法
3.4.3 wait()函数
函数调用: cond.wait(timeout=None)
函数功能:挂起当前线程,进入等待唤醒状态,同时出让Condition内置锁的权限
传入参数: timeout
timeout: int/NoneType类型,设置等待的超时限制
返回参数: 无
3.4.4 wait_for()方法
函数调用: re = cond.wait_for(predicate, timeout=None)
函数功能:挂起当前线程,调用predicate函数等待返回结果为True
传入参数: predicate, timeout
predicate: function类型,等待的条件函数
timeout: int/NoneType类型,设置等待条件函数的超时时间
返回参数: re
re: bool类型,条件等待的结果,条件函数返回True则此处为True,条件函数返回False或等待超时,都会返回False
3.4.5 notify()方法
函数调用: cond.notify(n=1)
函数功能:按照进入等待的顺序唤醒相应数量的等待线程
传入参数: n
n: int类型,唤醒线程的数量
返回参数: 无
3.4.6 notify_all()方法
函数调用: cond.notify_all()
函数功能:按照进入等待的顺序唤醒所有等待线程
传入参数: 无
返回参数: 无
3.5 Event类
类实例化:evt = threading.Event()
类的功能:通过内置标志位控制线程的类
传入参数: 无
返回参数: evt
evt: instance类型,生成的时间出发类实例
3.5.1 is_set()方法
函数调用: re = evt.is_set()
函数功能:查看内置标志位状态
传入参数: 无
返回参数: re
re: bool类型,内置的标志位值
3.5.2 set()方法
函数调用: evt.is_set()
函数功能:设置内置标志位为True,唤醒等待线程。其实质为with cond的notify_all
传入参数: 无
返回参数: 无
3.5.3 clear()方法
函数调用: evt.clear()
函数功能:设置内置标志位为False,其本质为with cond下的Flag=False
传入参数: 无
返回参数: 无
3.5.4 wait()方法
函数调用: [re = ]evt.wait(timeout=None)
函数功能:查看内置标志,判断是否进入等待,其本质为cond.wait()
传入参数: timeout
timeout: int类型,设置的超时时间
返回参数: re
re: bool类型,等待结束返回True,超时或失败返回False
3.6 Barrier类
类实例化:barr = threading.Barrier(parties, action=None, timeout=None)
类的功能:建立一个线程阻碍实例,直到线程阻碍的wait数量达到设置值时,会释放所有等待的线程
传入参数: parties, action, timeout
parites: int类型,设置障碍阻塞线程的数量,达到此数量则释放阻塞
action: function类型,当越过障碍时,由其中一个线程执行该函数一次
timeout: int类型,障碍等待的超时时间
返回参数: barr
barr: instance类型,返回的障碍实例
3.6.1 parties属性方法
属性调用: parties = barr.parites()
属性功能: 返回跨越障碍所需要的等待线程数量
属性参数: parties
parties: int类型,跨越障碍所需的线程数量
3.6.2 n_waiting属性方法
属性调用: n = barr.n_waiting()
属性功能: 返回当前障碍中正在等待的线程数量
属性参数: n
n: int类型,当前障碍中正在等待的线程数量
3.6.3 wait()方法
函数调用: barr.wait(timeout=None)
函数功能:使线程挂起阻塞,并且使障碍等待线程数量增加一个
传入参数: timeout
timeout: int类型,设置的超时时间
返回参数: 无
3.7 Timer类
类实例化:timex = threading.Timer(interval, function, args=None, kwargs=None)
类的功能:生成一个延时调用函数的线程实例,基类为Thread,本质基于Event
传入参数: interval, function, args, kwargs
interval: int/float类型,函数延迟启动的时间
function: function类型,需要调用的函数
args: 传递给function的参数
kwargs: 传递给function的默认参数
返回参数: timex
timex: instance类型,延迟线程的类实例
3.7.1 cancel()方法
函数调用: timex.cancel()
函数功能:取消对延迟函数的延迟等待,如果延迟函数还未启动
传入参数: 无
返回参数: 无
3.7.2 run()方法
函数调用: timex.run()
函数功能:开启延时线程实例的计时
传入参数: 无
返回参数: 无
3.8 _DummyThread类
类实例化:_dummy = _DummyThread()
类的功能:代表当前未运行的线程,常在current_thread中调用不是通过threading生成的线程时,返回一个功能有限的DummyThread
传入参数: 无
返回参数: _dummy
_dummy: instance类型,Dummy线程,守护线程性质
3.9 _MainThread类
类实例化:_main_thread = _MainThread()
类的功能:生成模块内代表主线程的特殊线程
传入参数: 无
返回参数: _main_thread
_main_thread: instance类型,代表主线程的实例
Python的并发并行[1] -> 线程[0] -> threading 模块的更多相关文章
- Python的并发并行[2] -> 队列[0] -> queue 模块
queue 模块 / queue Module 1 常量 / Constants Pass 2 函数 / Function Pass 3 类 / Class 3.1 Queue类 类实例化:queue ...
- Python的并发并行[3] -> 进程[0] -> subprocess 模块
subprocess 模块 0 模块描述 / Module Description From subprocess module: """Subprocesses wit ...
- Python的并发并行[1] -> 线程[1] -> 多线程的建立与使用
多线程的建立与使用 目录 生成线程的三种方法 单线程与多线程对比 守护线程的设置 1 生成线程的三种方法 三种方式分别为: 创建一个Thread实例,传给它一个函数 创建一个Thread实例,传给它一 ...
- Python的并发并行[1] -> 线程[2] -> 锁与信号量
锁与信号量 目录 添加线程锁 锁的本质 互斥锁与可重入锁 死锁的产生 锁的上下文管理 信号量与有界信号量 1 添加线程锁 由于多线程对资源的抢占顺序不同,可能会产生冲突,通过添加线程锁来对共有资源进行 ...
- Python的并发并行[1] -> 线程[3] -> 多线程的同步控制
多线程的控制方式 目录 唤醒单个线程等待 唤醒多个线程等待 条件函数等待 事件触发标志 函数延迟启动 设置线程障碍 1 唤醒单个线程等待 Condition类相当于一把高级的锁,可以进行一些复杂的线程 ...
- {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器
Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...
- <python的线程与threading模块>
<python的线程与threading模块> 一 线程的两种调用方式 threading 模块建立在thread 模块之上.thread模块以低级.原始的方式来处理和控制线程,而thre ...
- python全栈开发 * 进程池,线程理论 ,threading模块 * 180727
一.进程池 (同步 异步 返回值) 缺点: 开启进程慢 几个CPU就能同时运行几个程序 进程的个数不是无线开启的 应用: 100个任务 进程池 如果必须用多个进程 且是高计算型 没有IO型的程序 希望 ...
- 线程与threading模块
线程 进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位.在单个进程中同时运行多个线程完成不同的工作,称为多线程. 同一进程内的多个线程是共享该进程的资源. 创建新的线程开销 ...
随机推荐
- DOS程序员手册(十五)
837页 writeln('TRACING Current Buffer==='); holdup; bcbtrc(cvtbase^.curbfr); writeln; holdup ; writel ...
- Pascal 杨辉三角
用于打印杨辉三角的程序,有多种算法仅提供一种 PRogram yh (input,ouput);var m,n,c:integer;Begin For m:=0 TO 10 Do Begin ...
- 《算法》C++代码 Dijkstra
单源最短路,复杂度是O(N²),堆优化的是O(NlogN).基本思想是贪心,每次都加入一个当前最近的点,可以证明每次当时最近的点就是当前最短的路径.因此,所有点都加入之后,起点到所有点的最短路径就都求 ...
- 嗯,ACM按照这个一步一步来。
转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什么就眼红, 发挥 ...
- mysql一机多实例安装记录
因为想研究mycat,所以需要安装多个mysql实例进行研究.限于没有多于计算机,只能在本机安装了.通过mysql文档,自己琢磨着安装成功! 目录结构如下: 其中one和two文件夹用来模拟数据库分库 ...
- 参加2018之江杯全球人工智能大赛
:视频识别&问答
学习了一段时间的AI,用天池大赛来检验一下自己的学习成果. 题目:参赛者需对给定的短视频进行内容识别和分析,并回答每一个视频对应的问题.细节请到阿里天池搜索. 两种思路 1 将视频截成一帧一帧的图片, ...
- HDU 4661 Message Passing ( 树DP + 推公式 )
参考了: http://www.cnblogs.com/zhsl/archive/2013/08/10/3250755.html http://blog.csdn.net/chaobaimingtia ...
- jsp处理
jsp处理步骤: 浏览器发送一个HTTP请求给服务器. Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎.通过使用URL或者.jsp文件来完成. JSP引擎从磁盘中载入JSP ...
- iPhone新建项目不能全屏
上个周做项目的时候,发现新建了一个项目不能全屏.伤透了我的脑筋,然后又请教了团队里其他两个大牛帮我搞定了这个问题. 虽然是搞定了,但也看的出大牛也是云里雾里.歪打正着解决的. 今天又想新做个项目,这个 ...
- nyoj 题目61 传纸条
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...