python-使用单个线程时Queue.full()是否可靠?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-使用单个线程时Queue.full()是否可靠?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1146字,纯文字阅读大概需要2分钟。
内容图文
Python的thread-safe Queue对象具有一个名为Queue.full()的有用函数,带有以下文档:
Return True if the queue is full, False otherwise. If full() returns
True it doesn’t guarantee that a subsequent call to get() will not
block. Similarly, if full() returns False it doesn’t guarantee that a
subsequent call to put() will not block.
显然,在多线程方案中,多个线程在队列中放置put()项目,而多个线程在get()项目中存在竞争条件.但是,如果仅一个线程使用put(),而一个线程使用get(),那么full()的值就不能被信任吗?
这是Python实现特定的问题吗?如果是这样,CPython的答案是什么?
解决方法:
如果您的意思是仅使用一个线程来执行所有操作,那么可以.如果没有其他东西可以访问它,则无法更改它.
如果您的意思是总体上有两个线程,那么没有,则仍然存在竞争条件的机会.
无论哪种方式,真正的问题是您为什么要这样做?尝试一下,如果失败则捕获异常-这是Python方式.
try:
some_queue.get_nowait()
except queue.Empty:
do_something_else()
这样做的优点是将来是线程安全的,并且在任何情况下都避免了竞争情况(不需要线程引起这种情况,您可以通过调用在检查和意外获取之间更改代码) .
编辑:正如下面的注释中指出的larsmans一样,在其他与竞争条件有关的问题中,CPython将Queue.full()标记为可能在某个时候被删除,因此还有另一个避免它的原因.
内容总结
以上是互联网集市为您收集整理的python-使用单个线程时Queue.full()是否可靠?全部内容,希望文章能够帮你解决python-使用单个线程时Queue.full()是否可靠?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。