首页 > 解决方案 > 在 Python 中仅锁定队列的入口/出口

问题描述

我有一个系统,其中包含 -

Queue & 2 types of instances -
                             1.push to the Queue
                             2.pull from Queue

我想同时从队列中推入和拉出,但我不确定(我在文档中没有找到,也没有找到实现)队列是否可以防止访问同一内存的冲突

for example:
    There is zero elements in the Queue -> I push and then I pull in the same time

我的问题是如果队列不保护它,有什么办法只锁定队列的入口或出口?

标签: pythonmultithreadingqueue

解决方案


Queue 类知道并发访问并正确处理它。如果您从队列中拉出 ( queue.get()) 并且队列中没有任何内容,则调用将阻塞或超时。如果您推送到队列 ( queue.put()),那么这将得到正确处理,并且只有在您为队列设置了最大大小并且队列已满时,调用才会阻塞或超时。

文档说:

queue模块实现了多生产者、多消费者队列。当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用。该Queue模块中的类实现了所有必需的锁定语义。这取决于 Python 中线程支持的可用性;见threading 模块。


推荐阅读