在Python中,multiprocessing
模块允许你创建多个进程来并行执行任务。然而,由于全局解释器锁(GIL)的存在,Python的线程并不能真正地并行执行。为了在多进程之间共享数据,你可以使用multiprocessing
模块提供的一些数据结构和通信机制。
-
Value和Array:这些是用于在进程之间共享单个值或数组的类。
Value
:用于共享单个值(如整数、浮点数等)。它提供了一个简单的原子操作来设置和获取值。Array
:用于共享一个固定大小的数组。它类似于numpy
数组,但可以在多个进程之间共享。
-
Manager:
Manager
对象允许你创建可以在多个进程之间共享的数据结构,如列表、字典等。这些数据结构实际上是在一个单独的进程中维护的,并通过网络与主进程通信。 -
Queue和Pipe:这些是用于在进程之间传递数据的通信机制。
Queue
:一个线程和进程安全的队列,可以在多个进程之间安全地传递数据。Pipe
:一对连接对象,可以在两个进程之间双向传递数据。
下面是一个使用Manager
在多进程之间共享数据的示例:
from multiprocessing import Process, Manager def worker(shared_list): shared_list.append('Hello from process') if __name__ == '__main__': manager = Manager() shared_list = manager.list(['Hello from main process']) p = Process(target=worker, args=(shared_list,)) p.start() p.join() print(shared_list) # 输出:['Hello from main process', 'Hello from process']
在这个示例中,我们创建了一个Manager
对象,并使用它创建了一个可以在多个进程之间共享的列表。然后,我们创建了一个子进程,并将共享列表作为参数传递给它。子进程向共享列表中添加了一个字符串,最后我们打印出共享列表的内容,可以看到两个进程都成功地向列表中添加了数据。