Python time.sleep - 永不醒来

2024-05-10

我认为这将是那些简单的问题之一,但它让我感到困惑。

[停止媒体:我是对的。找到了解决方案。查看答案。]

我正在使用 Python 的单元测试框架来测试多线程应用程序。很好而且很直接 - 我有 5 个左右的工作线程监视一个公共队列,以及一个为它们制作工作项的生产者线程。生产者线程由测试用例触发。

在此测试中,只有一个任务被放入队列中。它在测试中所做的处理只是真正处理的存根,因此工作线程会进行 5 秒的睡眠来模拟任务真正完成之前经过的时间,并且线程将准备好获取另一个任务。

代码片段是:

 logging.info("Sleep starting")
 time.sleep(5)
 logging.info("Waking up")

现在是奇怪的部分。我看到“睡眠开始”日志消息,但没有看到唤醒消息。程序锁定并且不响应键盘中断 (CTRL+C)。 CPU负载非常低。

我在 Windows 和 Ubuntu (Python 2.6.2) 中看到同样的问题。

我考虑过是否发生异常并被隐藏,因此我在第一行和第二行之间添加“print 1/0” - 我看到引发了除零错误。我把它移到睡眠后,但我从未看到该消息。

我想“好吧,也许另一个线程正在尝试同时记录非常非常大的东西,并且它仍在缓冲。它在做什么?”

好吧,此时,测试已返回到单元测试,在测试系统状态之前,它会暂停等待线程开始运行。

 logging.info("Test sleep starting")
 time.sleep(0.25)
 logging.info("Test waking up")

哇,这看起来很熟悉。它以完全相同的方式冻结!第一条日志消息出现,第二条则没有。

我最近对该单元进行了重大重写,因此我不能声称“我没有碰任何东西”,但我在我的更改中看不到任何不愉快的地方。

可疑区域:

  • 我包括使用 Threading.Lock (因为我不知道如何推理 GIL 的安全性,所以我坚持我所知道的。我没有看到我的代码有任何“死锁”。

  • 我是 Python 单元测试框架的新手。它是否可以通过重定向日志记录或类似的方式来模拟这些症状?

  • 不,我没有替换非标准时间模块!

什么会阻止线程唤醒?我还错过了什么?


Sigh.

工作线程 #1 正在睡眠,然后醒来。然后它将记录唤醒消息,并被阻止。一次只能有一个线程进行日志记录。

UnitTest 线程正在睡眠,然后醒来。然后它将记录唤醒消息,并被阻止。一次只能有一个线程进行日志记录。

当第一个工作线程正在休眠时,先前未提及的工作线程 #2 正在悄悄地完成队列中上一个项目的处理。它得到了一个日志语句。其中一个参数是一个对象,并且 str() 被隐式调用。这str该对象上的 () 函数有错误;当它访问其某些数据成员时,它陷入僵局。死锁发生在日志记录函数处理时,从而保持日志记录线程锁定,并使其看起来像其他线程从未醒来。

除以零测试没有什么区别,因为它的结果是尝试记录。

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

Python time.sleep - 永不醒来 的相关文章

随机推荐

  • WPF ComboBox 中具有本地化名称的枚举

    我有一个列出枚举的组合框 enum StatusEnum Open 1 Closed 2 InProgress 3
  • 如何保存包含框架/iframe 的完整 html 页面?

    在网页抓取期间 我想将当前页面的 html 保存到文件中以供以后调试 browser html在大多数情况下有帮助 但是当页面包含 iframe frame 时 它 的内容不会返回browser html 我必须用类似的东西单独得到它bro
  • 如何获取 Matplotlib 生成的散点图的像素坐标?

    我使用 Matplotlib 生成散点图的 PNG 文件 现在 对于每个散点图 除了 PNG 文件之外 我还会also就像生成散点图中各个点的像素坐标列表一样 我用来生成散点图 PNG 文件的代码基本上是这样的 from matplotli
  • 什么是闭包编译器?

    如果您不知道我在说什么 请查看以下内容 http closure compiler appspot com home http closure compiler appspot com home 这是一个 JavaScript 压缩器 在他
  • 嵌入式 tomcat 7 servlet 3.0 注释不起作用

    我有一个精简的测试项目 其中包含 Servlet 版本 3 0 用注释声明 如下所示 WebServlet test public class TestServlet extends HttpServlet private static f
  • NSFetchedResultsController 中的部分名称与托管对象值不匹配

    我正在使用 NSFetchedResultsController 用大约 1500 个实体的中等大小的核心数据存储的结果填充 UITableView 结果控制器相当标准 一些潜在错误的 热点 并不适合此设置 在与其使用的同一 主 线程上创建
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • 动态框架中未定义的架构符号

    我正在开发一个 iOS 框架 该框架包含多个第三方框架并使用 UnitySendMessage C 方法与 Unity 进行通信 我想创建一个动态框架 支持 iOS8 但我偶然发现以下编译错误 Undefined symbols for a
  • 如何更改主题的起始偏移量?

    是否可以更改新主题的起始偏移量 我想创建一个新主题并从偏移量开始阅读10000 How 自从卡夫卡0 11 0 0 https issues apache org jira browse KAFKA 4743你可以使用脚本kafka con
  • 计算数据帧 R 中字符串的频率

    我想计算数据框中某些字符串的频率 strings lt c pi pie piece pin pinned post df lt as data frame strings 然后我想计算字符串的频率 counts lt c pi in pi
  • 如果 node_modules 目录存在,Azure 模拟器无法启动 Web 角色

    我想我只是偶然发现了一个非常奇怪的问题 我有一个相当大的解决方案 包括一个具有 3 个角色 两个工作角色和一个 Web 角色的 Azure 项目 Web角色基于asp net mvc和web api 昨天尝试 gulp 用于编译和捆绑较少的
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 使用 Google 地图 API 进行反向地理编码

    我正在研究 JavaScript Google Map API 版本 3 更准确地说 正在研究反向地理定位 在 的帮助下官方文档 http code google com intl fr apis maps documentation ge
  • Matplotlib 将颜色图 tab20 更改为三种颜色

    Matplotlib 有一些新的且非常方便的颜色图 选项卡颜色图 https matplotlib org examples color colormaps reference html 我错过的是生成像 tab20b 或 tab20c 这
  • OVER ORDER BY 中的多个列

    有没有办法在 OVER ORDER BY 子句中指定多个列 SELECT ROW NUMBER OVER ORDER BY A Col1 AS ID FROM MyTable A 上面的方法工作正常 但尝试添加第二列不起作用 SELECT
  • 尝试在本地主机上测试我的 php 文件,但只出现一个空白页面,没有错误消息

    我正在运行 Apache 和 mySQL 因为我检查了所有日志 似乎没有任何错误 我的目标是每当有新的表单条目时就向特定地址发送电子邮件 我对后端和 PHP 缺乏经验 所以我不太确定哪里出了问题 任何帮助将不胜感激
  • 哪种 Java DOM 包装器是最好或最受欢迎的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用脚本自动输入 SSH 密码

    我需要创建一个自动向 OpenSSH 输入密码的脚本ssh client 假设我需要通过 SSH 进入myname somehost用密码a1234b 我已经尝试过 bin myssh sh ssh myname somehost a123
  • 如何在高速缓存中存储图像

    我对此完全空白 我想从 URL 下载图像 并且必须将其存储在内部 以便下次我不需要连接到网络 而是从缓存中检索它 但我不知道该怎么做 谁能帮我提供一个代码片段 import java io BufferedInputStream impor
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作