在Python中构建阻塞,零长度队列的好方法

Feu*_*mel 8 python java concurrency multithreading

在Java中,有java.util.concurrent.SynchronousQueue一个没有存储容量的队列.尝试放入/获取值的线程总是阻塞,直到另一个线程分别尝试获取/放置值.

有什么好的方法在Python中做同样的事情?即我想要一种方法将值从一个或多个线程的集合传递到另一个一个或多个线程的集合,而没有任何值"属于"任一组中的线程.

Python queue.Queue不允许长度0,为最大容量指定非正值会创建无限制队列.

Jon*_*tts 2

我有一种感觉,以下可能会陷入僵局,但是像下面这样的事情会起作用吗?

class SynchronousQueue(object):
    def __init__(self):
        self.ready_to_get = Queue(1)
        self.queue = Queue(1)

    def get(self):
        self.ready_to_get.put('ready', block=True)
        return self.queue.get(block=True)

    def put(self, item):
        self.ready_to_get.get(block=True)
        self.queue.put(item, block=True)
Run Code Online (Sandbox Code Playgroud)

常规队列支持您想要的一半(getter 等待 putter),因此我们可以尝试通过阻止 put 直到 get 开始来实现相反的操作。