我是 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 已经被设计为进程安全的,我认为它应该在内部处理必要的锁定,以确保数据在进程之间安全交换。
multiprocessing.Queue 具有所有需要的功能,您不需要在顶部添加任何同步(也不应该)。
get
是阻塞的,但它没有条件变量,因为它依赖于操作系统在读取完成时唤醒线程,就像从套接字或标准输入读取一样,但它有一个多处理读锁确保并发读取安全。put
不是阻塞的,因为它有一个内部线程通过管道推送数据,但它有一个写锁,因此您可以从多个进程中put
。