Python的multiprocessing
模块提供了一个易于使用的接口,用于创建多进程并发程序。与threading
模块不同,multiprocessing
模块可以绕过Python的全局解释器锁(GIL),允许程序利用多核处理器的能力。
multiprocessing
模块的主要特点
- 真正的并行:每个进程有自己的Python解释器和内存空间,可以实现真正的并行计算。
- 简化的共享状态:可以使用共享内存、队列、管道等方式在进程间共享数据。
- 强大的同步机制:提供了锁、事件、条件变量等同步原语。
- 进程池:通过
Pool
类可以创建进程池,方便管理和并发执行多个进程。
常用multiprocessing
函数及其参数
Process()
创建一个进程对象。
group
: 进程组,默认为None
。target
: 进程启动时调用的函数。name
: 进程的名称。args
: 传递给目标函数的参数。kwargs
: 以关键字形式传递给目标函数的参数。
Queue()
创建一个进程安全的队列。
maxsize
: 队列的最大容量。
Pipe()
创建一对连接的管道。
duplex
: 是否为双向通信。
Lock()
创建一个锁对象。
- 无参数。
Event()
创建一个事件对象。
- 无参数。
Condition()
创建一个条件变量对象。
lock
: 关联的锁对象。
Pool()
创建一个进程池。
processes
: 进程池中的进程数量。initializer
: 初始化函数。initargs
: 初始化函数的参数。
Manager()
创建一个共享内存的管理器。
address
: 服务器地址。authkey
: 授权密钥。
Value()
创建一个共享变量。
typecode
: 变量类型。value
: 变量的初始值。
Array()
创建一个共享数组。
typecode
: 数组元素的类型。sequence
: 用于初始化数组的序列。
示例
以下是一个使用multiprocessing
模块创建多个进程的示例:
import multiprocessing
def worker(name):
print(f'Launched process with ID: {multiprocessing.current_process().name}, name: {name}')
if __name__ == '__main__':
processes = [multiprocessing.Process(target=worker, args=(f'worker-{i}',)) for i in range(5)]
for p in processes:
p.start()
for p in processes:
p.join()
print('All processes completed.')
在这个示例中,我们定义了一个worker
函数,它将打印进程的ID和名称。然后我们创建了五个进程,每个进程都运行worker
函数,并传递了一个唯一的名称。我们启动所有进程,并等待它们完成。