1 模块简介
threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版。threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作。
不过请注意,Python中的线程最好是与IO操作一起工作,比如从网络上下载资源或者从你的电脑中读取文件和目录。如果你需要处理一些CPU密集的任务,你最好是看看Python的multiprocessing模块。原因就是Python有GIL锁(解释器全局锁),使得所有的线程在主线程内运行。由于这个原因,当你使用线程执行CPU密集型任务时,你可能会发现它会运行的很慢。下面,我们主要集中在IO操作--线程做的好的场景。
2 模块使用
2.1 线程入门
一个线程允许你像运行一个独立的程序一样,运行一段独立的代码,类似于subprocess,区别在于,线程运行的是函数或者类,而不是一个独立的程序。我发现使用一个具体的实例会有助于我们更加理解概念。实例如下,
import threading def doubler(number): print(threading.currentThread().getName() + "\n")
print(number * 2) print"" if __name__ == "__main__": for i in range(5):
my_thread = threading.Thread(target = doubler,args = (i,))
my_thread.start()
my_thread.join()
我们首先引入threading模块,创建一个常规的函数doubler。这个函数将输入值乘以2,它也打印出调用这个函数的线程的名字,最后打印一个空白行。你也许会注意到当我们实例化一个线程时,我们设置它的target为我们的doubler函数,然后我们将变量传递给这个函数。使用args参数看起来有些奇怪,是因为我们需要向doubler函数传递一个序列,但是它只介绍一个变量,我们我们需要在末尾放入一个逗号,从而构造出一个序列。
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26
学习是年轻人改变自己的最好方式