Python高并发编程基础
目录
¶概述
解释器将 Python 转换成一种中间语言,叫做 Python 字节码,类似于汇编语言,但是包含一些更高级的指令。当运行一个 Python 程序的时候,评估循环不断将 Python 字节码转换成机器码。解释型语言的好处是方便编程和调试,但是程序的运行速度慢。Python 提供了很多可以利用并行的模块,我们将着重讨论这些并行编程的模块
¶基于线程的并行
Python 通过标准库的 threading
模块来管理线程,线程模块的主要组件如下:
- 线程对象
- Lock 对象
- RLock 对象
- 信号对象
- 条件对象
- 事件对象
使用线程最简单的一个方法是,用一个目标函数实例化一个 Thread 然后调用 start()
方法启动它。Python 的 threading 模块提供了 Thread()
方法在不同的线程中运行函数或处理过程等
1 | class threading.Thread(group=None,target=None,name=None,args=(),kwargs={}) |
group
: 一般设置为None
,这是为以后的一些特性预留的target
: 当线程启动的时候要执行的函数name
: 线程的名字,默认会分配一个唯一名字Thread-N
args
: 传递给target
的参数,要使用 tuple 类型kwargs
: 同上,使用字典类型 dict
⛵当然也可以通过继承的方式实现多线程,使用 threading 模块实现一个新的线程,需要下面 3 步:
- 定义一个
Thread
类的子类 - 重写
__init__(self [,args])
方法,可以添加额外的参数 - 重写
run(self, [,args])
方法来实现线程要做的事情
1 | import threading |
¶基于进程的并行
产生(spawn)的意思是:由父进程创建子进程,父进程既可以在产生子进程之后继续异步执行,也可以暂停等待子进程创建完成之后再继续执行。Python
的multiprocessing
库通过以下几步创建进程:
- 创建进程对象
- 调用
start()
方法,开启进程的活动 - 调用
join()
方法,在进程结束之前一直等待
1 | import multiprocessing |