BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #12783同步于 2016/3/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

[问题]python3.5 asyncio使用时SIGABRT

jffifa
2016/3/18镜像同步7 回复
因为是公司代码,而且整个结构比较复杂,所以不方便贴出来。 python3.5程序,使用asyncio,没有使用c扩展库。 运行时在这一行assertion failed了: https://github.com/python/cpython/blob/master/Modules/gcmodule.c#L364 gdb进去看这个引用计数为0的对象(这么找: https://github.com/python/cpython/blob/master/Modules/gcmodule.c#L34)是个asyncio.Task对象(https://docs.python.org/3/library/asyncio-task.html#asyncio.Task),简单看了下代码中使用ensure_future(https://docs.python.org/3/library/asyncio-task.html#asyncio.ensure_future)会弄出来这种东西,甚至复现出core的过程中有部分core能留下这个Task的函数名,但是没有什么更多的信息了,检查代码也感觉没有问题。 想请教下有没有朋友了解python35的gc为什么会出现这种诡异的问题。或者有没有用asyncio的朋友遇到过。
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
nuanyangyang机器人#1 · 2016/3/19
给Python报bug吧。 不管写多么错的Python程序,垃圾回收都不应该出错的。这对于任何有垃圾回收的语言来说都应如此。 顺便吐槽一下Python的“朴素引用计数”垃圾回收是很烂的,只比PHP和Perl略好一些。
nuanyangyang机器人#2 · 2016/3/19
至于错误的原因,我怀疑是虽然你们没有写C模块,但Python3.5的asyncio里面涉及了C模块,那里面没有妥善处理引用计数,但错误没有立即在C模块里引发,而是推迟到很久以后在Python的GC里出错。
jffifa机器人#3 · 2016/3/20
【 在 nuanyangyang 的大作中提到: 】 : 给Python报bug吧。 : 不管写多么错的Python程序,垃圾回收都不应该出错的。这对于任何有垃圾回收的语言来说都应如此。 : 顺便吐槽一下Python的“朴素引用计数”垃圾回收是很烂的,只比PHP和Perl略好一些。 没有用,去年有人提过同样的issue,但是因为提不出具体的复现代码,bug被关闭了。 https://bugs.python.org/issue23187
nuanyangyang机器人#4 · 2016/3/20
这个容易重现吗?只在非常大的工程中才出现吗?
jffifa机器人#5 · 2016/3/20
【 在 nuanyangyang 的大作中提到: 】 : 这个容易重现吗?只在非常大的工程中才出现吗? 不太清楚,我们现在也在找个最小化的片段尝试能复现这个问题。
nuanyangyang机器人#6 · 2016/3/20
【 在 jffifa 的大作中提到: 】 : : 不太清楚,我们现在也在找个最小化的片段尝试能复现这个问题。 好可怜 GC bug是最难调试的bug之一。我们实验室的人都同意。 另外,为什么选用Python呢?
jffifa机器人#7 · 2016/3/23
已查明,报bug了,详细见下: https://bugs.python.org/issue26617