Twisted 21.7.0库自身偶发FileNotFoundError错误,是否为已知Bug?
关于Twisted 21.7.0偶发FileNotFoundError的问题答复
结论
该报错属于Twisted 21.7.0的已知Bug,问题完全出在Twisted底层反应器逻辑,和用户业务代码无关。
触发原因
- 报错发生在epoll反应器处理新TCP连接的流程中:当监听端口收到新连接请求,内核完成三次握手分配了新的文件描述符(fd)后,客户端在Twisted调用
epoll.modify注册该fd的读事件前就主动断开了连接,对应fd被内核提前回收,此时调用epoll.modify就会抛出[Errno 2] No such file or directory异常。 - Twisted 21.7.0版本的epollreactor逻辑没有对这类合法的fd提前回收场景做异常捕获,导致异常直接抛出,上层业务代码无法感知也无法捕获。
修复方案
- 临时规避:如果暂时无法升级版本,可以切换使用select反应器,或者添加全局异常捕获逻辑过滤该类型错误,该错误属于无害异常,不会影响正常业务运行。
- 永久修复:将Twisted升级到22.0.0及以上版本,官方已在该版本中合并对应修复补丁,在epoll的
_add/_remove方法中增加了ENOENT错误的捕获逻辑,会直接忽略针对已回收fd的操作请求。
内容的提问来源于stack exchange,提问作者Nahas
相关产品推荐
相关产品推荐

