gpt4 book ai didi

python - 如何在 Pipe、Queue、Value、Array 和 Manager 之间进行选择以在进程之间进行通信?

转载 作者:太空狗 更新时间:2023-10-29 20:26:08 24 4
gpt4 key购买 nike

在python中,在模块multiprocessing,Pipe, Queue, Value, 中提供了很多进程间通信的方式数组管理器。哪些是更好的选择?

最佳答案

如果要实现消息传递,请使用管道和队列。如果要实现共享内存,请使用 Value 和 Array。如果您想向多个进程公开面向对象的接口(interface),请使用管理器。

Pipe 适用于一对一通信或字节级协议(protocol):

  • 管道可以是双向的(“双工”)或单向的
  • Pipe 不是并发安全的:只有一个进程可以使用 Pipe 的同一端;适合一对一通信,否则需要加锁
  • 管道可以传输可拾取的 Python 对象或原始字节
  • 不能指定缓冲区大小

Queue 类似于单向管道,但可能适用于多对多场景:

  • 队列是单向的:先进先出
  • 队列是并发安全的:多个进程可以使用队列的同一端;所以当有多个生产者或多个消费者时很好
  • 队列只能传输可拾取的 Python 对象
  • 可以指定队列的最大大小
  • “无论何时使用队列,您都需要确保所有已放入队列的项目最终都会在加入流程之前被删除。”

队列是使用管道和一些锁/信号量实现的。

数组:

  • 提供对共享数据的同步访问
  • 仅使用 C 数据类型 (ctypes)

经理:

  • 可用于各种数据类型:它们返回代理对象,这些代理对象公开与底层(共享)对象相同的方法
  • 可以处理远程访问

ValueArray 是共享内存的轻量级方法。根据我的经验,使用 SyncManagerAutoProxy 的开销 can be huge .如果您可以使用 ValueArray 解决您的问题,请使用它们。 SyncManager 可能有助于将面向对象的接口(interface)公开给多个进程,除非调用频率不高。

关于python - 如何在 Pipe、Queue、Value、Array 和 Manager 之间进行选择以在进程之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16954798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com