有一个问题是为什么我们需要gevent.queue?,它询问了gevent.queue.Queue的必要性,因为它没有并行性,而只是与gevent并发。正确地说,答案解释如下:
..。您可能希望确保一系列语句以原子方式执行..。
因此,每个方法都应该是原子的,这解释了为什么我们需要一个队列对象,而不是一个“常规”列表,例如。但是,根据Python https://docs.python.org/3/library/queue.html,queue.Queue对象已经具有这些安全特性:
当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用。本模块中的队列类实现了所有所需的锁定语义。
那么,当gevent.queue.Queue已经存在时,为什么会存在queue.Queue呢?是否需要更多的安全特性,还是性能问题?
发布于 2019-09-25 07:19:06
在这句话中有一个GitHub问题的答案:
gevent的队列是根据gevent原语直接实现的,而不是像标准库队列那样经过猴子补丁的
threading库的抽象,而gevent的队列可以利用这样的事实,即某些操作不能被其他的绿地中断。这使它减少了开销和更好的性能。 即使不使用猴子补丁,gevent的队列也与gevent和greenlets兼容,而标准库队列不兼容,而且需要进行猴子修补。不是每个人都喜欢猴子贴图。 gevent的队列还有一个稍微丰富一点的接口,例如,它可以被迭代。
https://stackoverflow.com/questions/56762181
复制相似问题