Python 如何在管道、队列、值、数组和管理器之间进行选择以在进程之间进行通信?
在python中,它在模块多处理、Python 如何在管道、队列、值、数组和管理器之间进行选择以在进程之间进行通信?,python,process,Python,Process,在python中,它在模块多处理、管道、队列、值、数组和管理器中提供了许多进程间通信的方法。哪一个是更好的选择?如果要实现消息传递,请使用管道和队列。 如果要实现共享Memory,请使用Value和Array。 如果要向多个进程公开面向对象的接口,请使用管理器 管道适用于1对1通信或字节级协议: 管道可以是双向(“双工”)或单向的 管道不是并发安全的:只有一个进程可以使用管道的同一端;它在1对1通信中很好,否则需要锁 管道可以传输可拾取的Python对象或原始字节 无法指定缓冲区大小 队列类
管道
、队列
、值
、数组
和管理器
中提供了许多进程间通信的方法。哪一个是更好的选择?如果要实现消息传递,请使用管道和队列。
如果要实现共享Memory,请使用Value和Array。
如果要向多个进程公开面向对象的接口,请使用管理器
管道
适用于1对1通信或字节级协议:
- 管道可以是双向(“双工”)或单向的
- 管道不是并发安全的:只有一个进程可以使用管道的同一端;它在1对1通信中很好,否则需要锁
- 管道可以传输可拾取的Python对象或原始字节
- 无法指定缓冲区大小
队列
类似于单向管道,但可能适用于多对多场景:
- 队列是单向的:先进先出
- 队列是并发安全的:多个进程可以使用队列的同一端;因此,当有多个生产者或多个消费者时,它是好的
- 队列只能传输可拾取的Python对象
- 可以指定队列的最大大小
- “无论何时使用队列,都需要确保在加入进程之前,已放入队列的所有项目最终都将被删除。”
值
和数组
:
- 提供对共享数据的同步访问
- 仅使用C数据类型(
)ctypes
- 可用于各种数据类型:它们返回代理对象,代理对象公开与基础(共享)对象相同的方法
- 可以处理远程访问
Value
和Array
是一种轻量级的共享内存方法。根据我的经验,使用SyncManager
和AutoProxy
的开销很大。如果可以使用值
或数组
解决问题,请使用它们SyncManager
可能有助于将面向对象的接口公开给多个进程,除非它调用得不太频繁