我正在编写这个FileDecriptor类(继承自t.I。抽象文件描述符)监听/sys中某个文件的事件。在
不幸的是,它只能与Epoll的边缘触发模式一起使用。因此,我目前正在使用一些黑客解决方案在添加epoll列表后修改我的文件描述符:
self.startReading()
self._reactor._poller._control(_epoll.CTL_MOD, self.fileno(), _epoll.IN|_epoll.ET)
有更好的方法吗?这是否会带来任何问题(例如,Twisted是否可能在某个时间点再次删除ET标志)?在
Tags:
值得注意的一点是epoll文件描述符本身受epoll机制的支持。在
如果您确实需要以epoll reactor不支持的特定方式监视另一个描述符,您可以创建自己的epoll文件描述符,根据需要对其进行配置,然后要求epoll(或select、poll或甚至gtk)reactor为您监视epoll文件描述符。当reactor说你的epoll文件描述符是可读的,那么你可以做一个零超时epoll等待它来了解它想告诉你什么。在
Twisted已经完全支持这一点,您只需将
IReadDescriptor
接口实现为epoll文件描述符的包装器。在Twisted很可能会再次删除此标志。正如您在示例中看到的大量的
_
所看到的,您在这里使用了大量的私有api,它们可能会在没有警告的情况下发生更改。在但是,没有公共接口来做你想做的事情。在我看来,如果一个接口要求使用一个特定的sycall接口来查询其读/写就绪性(如epoll),而不是遵循与
epoll
、select
、poll
等的一般规则,那么这就是一个内核错误。我的第一个倾向是针对linux内核提交bug。但是,如果内核人员不愿意修复它,并且您希望提供一个带有单元测试的补丁,以向Twisted公开特定于linux+epoll
的公共接口,请随意开罚单。在相关问题 更多 >
编程相关推荐