Python 中使用 multiprocessing.Queue 的生产者消费者模式

问题描述 投票:0回答:1

我是 Python 及其并发方法的新手。我正在尝试使用 multiprocessing.Queue 类来实现生产者消费者模式。 通过使用 Queue 类,我可以只编写以下代码来实现该模式,还是应该为生产者和消费者显式使用 Lock 对象和两个 Condition 变量(就像通常在 C 中所做的那样)?

这是我的代码:

class ServerImpl(ServerSkeleton):
    def __init__(self, port, queue):
        super().__init__(port, queue)
        
    def deposita(self, item):
        self.queue.put(item)
        return "Deposited"
        
    def preleva(self):
        item = self.queue.get()
        return item

由于 multiprocessing.Queue 已经被设计为进程安全的,我认为它应该在内部处理必要的锁定,以确保数据在进程之间安全交换。

python multiprocessing producer-consumer
1个回答
0
投票

multiprocessing.Queue 具有所有需要的功能,您不需要在顶部添加任何同步(也不应该)。

  1. get
    是阻塞的,但它没有条件变量,因为它依赖于操作系统在读取完成时唤醒线程,就像从套接字或标准输入读取一样,但它有一个多处理读锁确保并发读取安全。
  2. put
    不是阻塞的,因为它有一个内部线程通过管道推送数据,但它有一个写锁,因此您可以从多个进程中
    put
© www.soinside.com 2019 - 2024. All rights reserved.