Python-queue.task_done() 的用途是什么?

2023-12-25

我编写了一个具有多个线程的脚本(使用threading.Thread) 从 a 获取 URLQueue using queue.get_nowait(),然后处理 HTML。我是多线程编程的新手,并且无法理解其目的queue.task_done()功能。

当。。。的时候Queue为空,则自动返回queue.Empty例外。所以我不明白每个线程都需要调用task_done()功能。我们知道当队列为空时我们就完成了,那么为什么我们需要通知它工作线程已经完成了他们的工作(这与队列无关,在他们从中获取 URL 之后) ?

有人可以给我提供一个代码示例(最好使用urllib、文件 I/O 或斐波那契数列和打印“Hello”以外的其他内容)向我展示了如何在实际应用中使用此函数?


Queue.task_done不是为了工人的利益。它在那里支持Queue.join.


如果我给你一盒工作任务,我会关心你什么时候把盒子里的所有东西都拿出来吗?

不,我关心的是何时工作完成了。看着一个空盒子并不能告诉我这一点。你和另外 5 个人可能还在研究你从盒子里拿出来的东西。

Queue.task_done让工人说,当任务完成。有人在等待所有工作完成Queue.join会等到足够task_done已进行呼叫,而不是在队列为空时进行。


艾根菲尔德在评论中指出,队列看起来真的很奇怪task_done/join方法。确实如此,但这确实是一个命名问题。这queuemodule 的名称选择很糟糕,这使得它听起来像是一个通用队列库,而实际上它是一个线程通信库。

对于通用队列来说,这会很奇怪task_done/join方法,但是线程间消息通道有一种方法来指示消息已被处理是完全合理的。如果班级被称为thread_communication.MessageChannel代替queue.Queue and task_done被称为message_processed,意图就会清晰很多。

(如果您需要通用队列而不是线程间消息通道,请使用collections.deque.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python-queue.task_done() 的用途是什么? 的相关文章

  • 在Python中使用字典作为switch语句[重复]

    这个问题在这里已经有答案了 我正在尝试使用字典用 Python 制作一个简单的计算器 这是我的代码 def default print Incorrect input def add a b print a b def sub a b pr
  • Django:将博客条目查看次数增加一。这有效率吗?

    我的索引视图中有以下代码 latest entry list Entry objects filter is published True order by date published 10 for entry in latest ent
  • 只使用 Django 的某些部分?

    我喜欢 Django 但对于一个特定的应用程序 我只想使用它的一部分 但我对 Django 的内部工作原理还不够熟悉 所以也许有人可以指出我必须做什么的正确方向查看 具体来说 我想使用 模型和数据库抽象 The 缓存API http doc
  • Spyder 导入模块出错

    我正在尝试在 Spyder 中使用 sklearn 一开始 当我尝试导入它时 我收到 ImportError No module named sklearn 然后我用 PYTHONPATH 管理器设置 PATH 然后使用工具菜单中的 更新模
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • 如何从 Lua 调用 Python 函数?

    我想从我的 lua 文件运行 python 脚本 我怎样才能实现这个目标 Example Python代码 sum py file def sum from python a b return a b Lua code main lua f
  • turtle.Screen().screensize() 未输出正确的屏幕尺寸[重复]

    这个问题在这里已经有答案了 我编写了一些代码来在屏幕周围随机放置点 但是 它并没有覆盖整个屏幕 import turtle import random t turtle Turtle color red green blue pink ye
  • 了解 asyncio 已经运行的永久循环和挂起的任务

    我在理解如何将新任务挂起到已经运行的事件循环中时遇到问题 这段代码 import asyncio import logging asyncio coroutine def blocking cmd while True logging in
  • python 脚本中 os.system 的 256 和 512 响应代码是什么

    当我在 python 中使用 os system ping 服务器时 我得到多个响应代码 使用的命令 os system ping q c 30 s SERVERANME 0 在线 256 离线 512 512 是什么意思 Per the
  • 检测/删除 Python 2 + GTK 中不成对的代理字符

    在Python 2 7中我可以成功转换Unicode字符串 abc udc34xyz 转换为 UTF 8 结果是 abc xed xb0 xb4xyz 但是当我将 UTF 8 字符串传递给例如时 pango parse markup or
  • 如何在Python中求和

    我想知道如何在 python 中表示总和而不需要像这样的循环here http docs scipy org doc scipy reference tutorial optimize html 我们有 def rosen x The Ro
  • Flask 中的 import 和 extends 有什么区别?

    我正在阅读 Flask Web 开发 在例4 3中 extends base html import bootstrap wtf html as wtf 我想知道 extends 和 import 有什么区别 我认为它们在用法上很相似 在什
  • pandas to_sql sqlalchemy 与 secure_transport 的连接

    我正在尝试将数据发送到具有 require secure transport ON 的服务器上的 mysql 数据库 当我尝试使用以下代码连接到它时 import pandas as pd import pymysql from sqlal
  • PyCharm - 如何挂起所有线程

    我们使用 PyCharm 5 0 1 进行多线程调试 当它在断点处停止时 只有特定线程停止 而所有其他线程继续 这使得 冻结时刻 和检查参数值以及其他线程的当前状态变得困难 当其中一个线程在断点处停止时 是否可以挂起所有线程 这在最新的 P
  • 检查多个 pd.DataFrame 是否相等

    是否有一种 Pythonic 方式 无循环或递归 来检查是否超过两个pd DataFrames 例如 pd DataFrames 列表 彼此相等吗 就像是 all x equals dfs 0 for x in dfs with dfs数据
  • 如何在 Sublime 2 REPL Mac 中运行 Python 3

    我的问题如下 我安装了 sublime 2 和 sublime repl 插件 一切正常 我唯一需要的是更改在控制台内置的 sublimerepl 上运行的 python 版本 我的意思是 我有 python 2 7 5 预先安装了 mav
  • Scrapy的redirect_urls异常.KeyError

    我是 Scrapy 和 Python 的新手 最近推出了我的第一个蜘蛛 有一个功能似乎以前有效 但现在它只适用于我试图废弃的一些网站 代码行是 item url direct response request meta redirect u
  • 如何使用 pygame.mixer 重复音乐?

    我创建了以下使用 pygame mixer 播放 mp3 音乐的代码 然而 音乐不会重复 有什么想法可以让音乐重复播放吗 这是代码 playlist list playlist append put music here mp3 playl
  • Scrapy 抓取并跟踪 href 中的链接

    我对 scrapy 很陌生 我需要从 url 的主页跟踪 href 到多个深度 再次在 href 链接内我有多个 href 我需要遵循这些href 直到到达我想要抓取的页面 我的页面的示例 html 是 初始页 div class page
  • 在多个图表上绘制一条线

    I don t know how this thing is called or even how to describe it so the title may be a little bit misleading The first a

随机推荐

  • python 乌龟中的逻辑错误

    我正在用 python 3 2 海龟编码 我有一张漂亮的坦克图 我知道如何向左移动并书写 然而 当试图使坦克上下移动时 我面临的问题是它会上升 但如果我松开并再次按下向上按钮 它转向左侧 可能很难解释 所以我包含了代码 Programmer
  • Xpath substring-before 只获取一个元素

  • 如何重新抛出异常并保留堆栈跟踪?

    这段代码 try try throw 1 catch e s print e s throw e catch e2 s2 print e2 s2 prints 1 0 main file test dart 34 7 1 0 main fi
  • RVM Requiremets 尝试利用已弃用的自制软件/版本

    我正在尝试让 Ruby on Rails 项目在我的 Mac OS Sierra 10 13 3 计算机上运行 当我导航到 Rails 文件夹时 RVM 告诉我以下信息 Required ruby 1 9 3 p392 is not ins
  • CSS:在列表项中显示彼此相邻的图像和div

    当我今天早上出发时 任务似乎很简单 建立一个元素列表 每个元素由缩略图 标题和副标题组成 我想让图像与其旁边的标题和副标题对齐 如果您查看 YouTube 视频页面 相关视频 框具有类似的布局 UPDATE 更具体地说 我正在尝试生成两列布
  • matplotlib:从图中删除补丁

    我在用matplotlib to interactively绘制一些patches and points 我通过队列从单独的进程接收数据并将它们发送到我的绘图进程 这部分代码工作正常 点显示在图表上 并按预期在图中不断更新 根据用户的要求
  • 第二高薪水

    编写一个 SQL 查询从 Employee 表中获取第二高的工资 Id Salary 1 100 2 200 3 300 例如 对于上面的 Employee 表 查询应返回 200 作为第二高薪水 如果没有第二高的薪水 则查询应返回 nul
  • SQL Server 2008 安装

    我正在尝试在启用 Win 7 的笔记本电脑上安装 MS SQL Server 2008 我在选择安装路径时遇到问题 当我继续选择 安装 然后单击 新的 SQL Server 独立安装或向现有安装添加功能 时 会弹出一个浏览对话框以选择安装文
  • Azure Functions ARM 模板部署删除函数

    我有一个 ARM 模板 包含在下面 来部署 Azure Function App 我将其部署为 az group deployment create resource group my group template file my func
  • 在 Excel 2013 中连接 Hortonworks Hive ODBC 时出错

    我正在尝试通过 Excel 2013 中的 ODBC 驱动程序查询 Hortonworks Hive 我在这里下载了驱动程序 32位 http hortonworks com downloads http hortonworks com d
  • JavaScript 点击处理程序在 for 循环内无法按预期工作[重复]

    这个问题在这里已经有答案了 我正在尝试学习 JS 但遇到了一个问题 我尝试了很多事情并用谷歌搜索但都是徒劳 以下代码无法按预期工作 我应该得到的值i单击但它总是返回 6 我正在拔头发 请帮忙 for var i 1 i lt 6 i con
  • 按日期列的子集对增量表进行分区

    我正在 Databricks 中创建一个增量表 其中包含 1 天的代理日志 数百行数百万行 我希望能够按小时对表进行分区 因此简单地按 time 列对表进行分区是不够的 另外 我正在使用 sql运行时在我的笔记本中创建表 但如果这是更好的选
  • WooCommerce 对于某些产品手动触发新订单电子邮件

    我需要知道仅针对特定产品的 WooCommerce 新订单电子邮件至给定电子邮件地址 例如 如果有人购买产品X需要一个新的订单电子邮件Y The Y未设置为后端收件人 有什么钩子可以实现这一点吗 我尝试关注 add action wooco
  • 基于 Android 订阅的许可

    目前正在准备将应用程序发布到市场上 大佬们想要对应用程序收取订阅费 但事实证明 这在 Android 上实现起来很麻烦 我们不想 99 美分永久购买该应用程序 因为该应用程序需要持续使用服务器 因此我们希望收取订阅费用 似乎 Android
  • 用空行填充查询结果

    我有以下查询 用于返回游戏中的最高分数 但如果记录少于 10 条 我希望用空行填充它 SELECT id MAX score mscore FROM scores WHERE id IN implode data GROUP BY id O
  • Postgresql 将 null 变成零 [重复]

    这个问题在这里已经有答案了 可能的重复 SELECT max x 返回 null 我怎样才能让它返回0 http stackoverflow com questions 1688715 select maxx is returning nu
  • 在 Laravel 4 中搜索和过滤/精炼数据库结果

    我正在寻找一种通过 Laravel 4 中的查询字符串搜索和过滤数据库表 Eloquent 模型的方法 我有一个名为houses列名为 price name hasCoffeeMachineand hasStove 我希望用户能够执行以下操
  • 如何在启动 mule 时自动运行一次流程?

    我有一个 java 类 它使用种子集合创建一个干净的 MongoDB 数据库 它会自动识别数据库是否丢失并创建它 我想在启动 MuleEsb 时运行它 这样我就不需要在启动 mule 之前记得调用它 我希望将其放入流程中并在 mule 启动
  • MSBuild 因缺少项目文件而强制编译失败

    作为一名开发人员 我希望我的编译器 在本例中为 Visual Studio 中的 MSBuild 在任何包含以下文件的情况下都会严重失败 csproj磁盘上丢失的项目 在目睹了网站上的 web config 被意外删除后 我萌生了这个想法
  • Python-queue.task_done() 的用途是什么?

    我编写了一个具有多个线程的脚本 使用threading Thread 从 a 获取 URLQueue using queue get nowait 然后处理 HTML 我是多线程编程的新手 并且无法理解其目的queue task done