【问题标题】:Python Queue Count of Unfinished TasksPython 未完成任务的队列计数
【发布时间】:2016-04-15 23:49:16
【问题描述】:

我正在使用Thread 实现 Python Queue。我需要一种方法来获取当前队列中的项目总数(我可以通过queue.qsize() 获取)和未完成任务的计数。基本上我需要计算所有正在处理/需要处理的项目。 Python Queue documentation 提到以下内容:

每当将项目添加到队列中时,未完成任务的计数就会增加。每当消费者线程调用 task_done() 以指示该项目已被检索并且所有工作已完成时,计数就会下降。当未完成任务的计数降至零时,join() 会解除阻塞。

但它没有提供有关如何访问该计数的见解。提前致谢!

【问题讨论】:

标签: python multithreading queue


【解决方案1】:

我很惊讶文档中没有提到它,但 Queue 对象有一个 unfinished_tasks 属性:

>>> x = queue.Queue()
>>> x.unfinished_tasks
0
>>> x.put("test")
>>> x.unfinished_tasks
1

由于文档中没有提到它,因此不能保证更新到较新版本的属性相同(尽管我有些怀疑),特别是我不相信这是线程安全的(因为任何内部使用已经在锁获取中,因此外部访问可能不会)

【讨论】:

  • 先生或女士,您是最棒的。
  • 是的,但是......它可以被视为 Queue 类的公共 API 的一部分还是实现细节?
  • @AlvaroGutierrezPerez shoot 我想不在文档中会使其成为实现细节。嗯,这令人失望。
  • 天气信息是否在文档中表示天气是 API 的一部分。文档一直都是错误的。 Python 显然 sates 以 '_' 或 '__' 开头的变量是私有变量,所以其他任何东西都应该被视为 API 的公共部分。
猜你喜欢
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 2019-05-31
相关资源
最近更新 更多