2024-05-12 18:23:19 发布
网友
在Java中,有java.util.concurrent.SynchronousQueue,一个没有存储容量的队列。尝试放置/获取值的线程总是阻塞,直到另一个线程分别尝试获取/放置值为止。在
java.util.concurrent.SynchronousQueue
在Python中有什么好方法可以实现同样的效果?一、 我想要一种方法来将值从一个或多个线程集传递到另一个一个或多个线程集,而不必“属于”任何一个组中的线程。在
Python的queue.Queue不允许长度为0,为最大容量指定一个非正值将创建一个无界队列。在
queue.Queue
0
我有种感觉下面可能是死锁之城,但是下面的工作会怎么样?在
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)
一个常规队列支持您想要的一半(getter等待putter),因此我们可以尝试通过阻塞put来实现相反的效果,直到get启动。在
您可以使用Queue.join()和Queue.task_done()来阻止,直到get()完成:
Queue.join()
Queue.task_done()
get()
class SynchronousQueue(object): def __init__(self): self.q = Queue(1) self.put_lock = RLock() def get(self): value = self.q.get(block=True) self.q.task_done() return value def put(self, item): with self.put_lock: self.q.put(item, block=True) self.q.join()
我有种感觉下面可能是死锁之城,但是下面的工作会怎么样?在
一个常规队列支持您想要的一半(getter等待putter),因此我们可以尝试通过阻塞put来实现相反的效果,直到get启动。在
您可以使用
Queue.join()
和Queue.task_done()
来阻止,直到get()
完成:相关问题 更多 >
编程相关推荐