我需要一个队列,多个线程可以将内容放入其中,并且多个线程可以读取。
Python至少有两个队列类,Queue.Queue和collections.deque,前者似乎在内部使用后者。两者都声称在文档中是线程安全的。
但是,队列文档还指出:
collections.deque是具有无限原子append()和popleft()操作的无界队列的替代实现,不需要锁定。
我猜我不太理解:这是否意味着双端队列毕竟不是完全线程安全的?
如果是这样,我可能无法完全理解两个类之间的区别。我可以看到Queue添加了阻止功能。另一方面,它失去了一些过时的功能,例如对操作员的支持。
直接访问内部双端队列对象是
Queue()中的x
线程安全的?
另外,当双端队列已经是线程安全的了,为什么Queue在操作上使用互斥锁?
deque
在同一线程中添加/删除一段时间时,都可能会出现此错误。无法获得此错误的唯一原因Queue
是Queue
不支持迭代。
RuntimeError: deque mutated during iteration
您可能会得到的是使用deque
多个线程之间的共享并且没有锁定...