Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在管道、队列、值、数组和管理器之间进行选择以在进程之间进行通信?_Python_Process - Fatal编程技术网

Python 如何在管道、队列、值、数组和管理器之间进行选择以在进程之间进行通信?

Python 如何在管道、队列、值、数组和管理器之间进行选择以在进程之间进行通信?,python,process,Python,Process,在python中,它在模块多处理、管道、队列、值、数组和管理器中提供了许多进程间通信的方法。哪一个是更好的选择?如果要实现消息传递,请使用管道和队列。 如果要实现共享Memory,请使用Value和Array。 如果要向多个进程公开面向对象的接口,请使用管理器 管道适用于1对1通信或字节级协议: 管道可以是双向(“双工”)或单向的 管道不是并发安全的:只有一个进程可以使用管道的同一端;它在1对1通信中很好,否则需要锁 管道可以传输可拾取的Python对象或原始字节 无法指定缓冲区大小 队列类

在python中,它在模块多处理、
管道
队列
数组
管理器
中提供了许多进程间通信的方法。哪一个是更好的选择?

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

管道
适用于1对1通信或字节级协议:

  • 管道可以是双向(“双工”)或单向的
  • 管道不是并发安全的:只有一个进程可以使用管道的同一端;它在1对1通信中很好,否则需要锁
  • 管道可以传输可拾取的Python对象或原始字节
  • 无法指定缓冲区大小
队列
类似于单向管道,但可能适用于多对多场景:

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

数组

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

  • 可用于各种数据类型:它们返回代理对象,代理对象公开与基础(共享)对象相同的方法
  • 可以处理远程访问
Value
Array
是一种轻量级的共享内存方法。根据我的经验,使用
SyncManager
AutoProxy
的开销很大。如果可以使用
数组
解决问题,请使用它们
SyncManager
可能有助于将面向对象的接口公开给多个进程,除非它调用得不太频繁