调用时Python多处理死锁条件通知()在其他进程准备就绪之前

2024-06-25 22:32:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个producer和consumer进程,以及它们之间的共享内存区域。当有新数据可用时,我使用Condition对象从生产者进程向消费者进程发出信号。在

当前的问题是等一下()具有以下跟踪:

Producer: (3, 3, 30, 100)
Producer Done
Consumer: (3, 3, 30, 100)
Consumer Waiting...

据我所知,在消费者准备好接收通知之前,生产者通知了消费者,因此一直在等待生产者的通知。确保消费者只在准备好时才收到信号的最佳方法是什么?在

^{pr2}$

Tags: producer数据对象区域进程consumer消费者condition
1条回答
网友
1楼 · 发布于 2024-06-25 22:32:12

如果没有人在等待,Condition.notify方法是noop。您需要将逻辑封装在while循环中,并定期检查数据是否准备就绪。Python文档有一个P&C example。您需要为wait方法设置一个超时,并在每次迭代时检查数组中的数据。在

使用LockEvent更容易避免长时间的轮询机制。在

def ArrayConsumer(aArray, lock, event):
    print('Consumer:', aArray.shape)
    print('Consumer Waiting...')
    event.wait()
    print('Waiting finished..')
    with lock:
        print('Consumer:', aArray[1, 1, 1, 1])
        event.clear()

def ArrayProducer(aArray, lock, event):
    print('Producer:', aArray.shape)
    with lock:
        aArray.fill(1)
        event.set()
    print('Producer Done')`

然而,我强烈建议使用PipeQueue来实现生产者和消费者模式。这是一个更强大的机制。在

相关问题 更多 >