/sys.
残念ながら、Epoll のエッジ トリガー モードでしか使用できません。そのため、現在、いくつかのハックなソリューションを使用して、追加後に epoll リストのファイル記述子を変更しています。
self.startReading()
self._reactor._poller._control(_epoll.CTL_MOD, self.fileno(), _epoll.IN|_epoll.ET)
これを行うより良い方法はありますか?これは何か問題を引き起こしますか?
Twisted がこのフラグを再び削除する可能性は十分にあります。例の s が大量にあることからわかるように_
、ここでは大量のプライベート API を使用しており、それらはすべて警告なしに変更される可能性があります。
ただし、必要なことを行うためのパブリック インターフェイスはありません。私の意見では、インターフェースが、、 、 などで動作する一般的なルールに従うのではなく、特定の sycall インターフェースを使用して読み取り/書き込みの準備状況を照会する必要がある場合 (epoll など)は、カーネルのバグです。私の最初の傾向は次のとおりです。 Linuxカーネルに対してバグを報告します。しかし、カーネル関係者がそれを修正せず、そのような linux+ 固有のものの公開インターフェースを Twisted に公開するための単体テストを含むパッチを提供したい場合は、お気軽にチケットを開いてください。epoll
select
poll
epoll
注意すべき興味深い点の 1 つは、epoll ファイル記述子自体が epoll メカニズムによってサポートされていることです。
epoll リアクターがサポートしていない特定の方法で別の記述子を監視する必要がある場合は、独自の epoll ファイル記述子を作成し、必要に応じて構成してから、epoll (または選択、ポーリング、さらには gtk) に問い合わせることができます。 ) リアクターを使用して、epoll ファイル記述子を監視します。リアクターが epoll ファイル ディスクリプターが読み取り可能であると判断した場合、それに対してゼロ タイムアウトの epoll_wait を実行して、リアクターが何を伝えたいかを知ることができます。
これは Twisted ですでに完全にサポートされています。必要なのは、IReadDescriptor
インターフェイスを epoll ファイル記述子のラッパーとして実装することだけです。