Twisted中的边缘触发epoll事件

2024-10-01 00:15:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写这个FileDecriptor类(继承自t.I。抽象文件描述符)监听/sys中某个文件的事件。在

不幸的是,它只能与Epoll的边缘触发模式一起使用。因此,我目前正在使用一些黑客解决方案在添加epoll列表后修改我的文件描述符:

self.startReading()
self._reactor._poller._control(_epoll.CTL_MOD, self.fileno(), _epoll.IN|_epoll.ET)

有更好的方法吗?这是否会带来任何问题(例如,Twisted是否可能在某个时间点再次删除ET标志)?在


Tags: 文件self列表sys模式事件解决方案边缘
2条回答

值得注意的一点是epoll文件描述符本身受epoll机制的支持。在

如果您确实需要以epoll reactor不支持的特定方式监视另一个描述符,您可以创建自己的epoll文件描述符,根据需要对其进行配置,然后要求epoll(或select、poll或甚至gtk)reactor为您监视epoll文件描述符。当reactor说你的epoll文件描述符是可读的,那么你可以做一个零超时epoll等待它来了解它想告诉你什么。在

Twisted已经完全支持这一点,您只需将IReadDescriptor接口实现为epoll文件描述符的包装器。在

Twisted很可能会再次删除此标志。正如您在示例中看到的大量的_所看到的,您在这里使用了大量的私有api,它们可能会在没有警告的情况下发生更改。在

但是,没有公共接口来做你想做的事情。在我看来,如果一个接口要求使用一个特定的sycall接口来查询其读/写就绪性(如epoll),而不是遵循与epollselectpoll等的一般规则,那么这就是一个内核错误。我的第一个倾向是针对linux内核提交bug。但是,如果内核人员不愿意修复它,并且您希望提供一个带有单元测试的补丁,以向Twisted公开特定于linux+epoll的公共接口,请随意开罚单。在

相关问题 更多 >