Python 在多线程状态下打印日志,是否会存在死锁问题?

2018-09-11 15:18:44 +08:00
 Buffer2Disk

如题,线上环境使用 thread.start_new_thread 启动了 10 个线程,每个线程读取数据库后,都在往同一个文件里面写入日

志,使用的是 Python 的 logging 模块

运行一段时间后,发现有 2 个线程没有写入日志了,但是其他八个线程仍然正常在写入,htop 查看该线程仍然是存在

的,这是死锁导致的吗?

网上查了下资料,logging 是线程安全的,应该是有 GIL 锁的,但是如果是死锁导致的话,其他八个线程应该也拿不

到锁才对,为什么能够继续写入呢?还是说在查数据库的时候连接超时导致的?

5131 次点击
所在节点    Python
22 条回复
weyou
2018-09-12 19:06:11 +08:00
@Buffer2Disk 可以检查下线程有没有访问相同的数据资源,比如同一个全局量或同一个对象之类的
mythmgn
2018-09-12 19:21:19 +08:00
@Buffer2Disk 二分法增加 log 试试。

这样缩小范围到具体是哪儿卡住了。 我调试多线程一般就是靠日志,哈哈。 一般玄学问题大部分都是代码逻辑问题。 真遇到编辑器或者库缺陷的,太少了,除非你直接操作了非常非常底层的东西

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/488208

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX