首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果`gevent.queue.Queue`已经存在并且线程是安全的,为什么会有`queue.Queue`呢?

如果`gevent.queue.Queue`已经存在并且线程是安全的,为什么会有`queue.Queue`呢?
EN

Stack Overflow用户
提问于 2019-06-25 21:22:29
回答 1查看 491关注 0票数 0

有一个问题是为什么我们需要gevent.queue?,它询问了gevent.queue.Queue的必要性,因为它没有并行性,而只是与gevent并发。正确地说,答案解释如下:

..。您可能希望确保一系列语句以原子方式执行..。

因此,每个方法都应该是原子的,这解释了为什么我们需要一个队列对象,而不是一个“常规”列表,例如。但是,根据Python https://docs.python.org/3/library/queue.htmlqueue.Queue对象已经具有这些安全特性:

当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用。本模块中的队列类实现了所有所需的锁定语义。

那么,当gevent.queue.Queue已经存在时,为什么会存在queue.Queue呢?是否需要更多的安全特性,还是性能问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 07:19:06

这句话中有一个GitHub问题的答案:

gevent的队列是根据gevent原语直接实现的,而不是像标准库队列那样经过猴子补丁的threading库的抽象,而gevent的队列可以利用这样的事实,即某些操作不能被其他的绿地中断。这使它减少了开销和更好的性能。 即使不使用猴子补丁,gevent的队列也与gevent和greenlets兼容,而标准库队列不兼容,而且需要进行猴子修补。不是每个人都喜欢猴子贴图。 gevent的队列还有一个稍微丰富一点的接口,例如,它可以被迭代。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56762181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档