7.3.1 ポーリングオブジェクト

poll() システムコールはほとんどの Unix システムでサポート されており、非常に多数のクライアントに同時にサービスを提供するような ネットワークサーバが高い拡張性を持てるようにしています。 poll() に高い拡張性があるのは、select() が ビット対応表を構築し、対象ファイルの記述子に対応するビットを立て、 その後全ての対応表の全てのビットを線形探索するのに対し、 poll() は対象のファイル記述子を列挙するだけでよいから です。 select() は O(最大のファイル記述子番号) なのに対し、 poll() は O(対象とするファイル記述子の数) で済みます。

register( fd[, eventmask])
ファイル記述子をポーリングオブジェクトに登録します。これ以降の poll() メソッド呼び出しでは、そのファイル記述子に処理待ち中の I/O イベントがあるかどうかを監視します。fd は整数か、 整数値を返す fileno() メソッドを持つオブジェクトを取ります。 ファイルオブジェクトも通常 fileno() を実装しているので、 引数として使うことができます。

eventmask はオプションのビットマスクで、どのタイプの I/O イベント を監視したいかを記述します。この値は以下の表で述べる定数 POLLINPOLLPRI、および POLLOUT の組み合わせにすることが できます。ビットマスクを指定しない場合、標準の値が使われ、 3 種のイベント全てに対して監視が行われます。

定数 意味
POLLIN 読み出せるデータの存在
POLLPRI 緊急の読み出しデータの存在
POLLOUT 書き出せるかどうか: 書き出し処理がブロックしないかどうか
POLLERR 何らかのエラー状態
POLLHUP ハングアップ
POLLNVAL 無効な要求: 記述子が開かれていない

すでに登録済みのファイル記述子を登録してもエラーにはならず、 一度だけ登録した場合と同じ効果になります。

unregister( fd)
ポーリングオブジェクトによって追跡中のファイル記述子を登録解除します。 register() メソッドと同様に、fd は整数か、 整数値を返す fileno() メソッドを持つオブジェクトを取ります。

登録されていないファイル記述子を登録解除しようとすると KeyError 例外が送出されます。

poll( [timeout])
登録されたファイル記述子に対してポーリングを行い、 報告すべき I/O イベントまたはエラーの発生したファイル記述子に 毎に 2 要素のタプル (fd, event) からなるリスト を返します。リストは空になることもあります。 fd はファイル記述子で、event は該当するファイル記述子 について報告されたイベントを表すビットマスクです -- 例えば POLLIN は入力待ちを示し、POLLOUT はファイル記述子 に対する書き込みが可能を示す、などです。 空のリストは呼び出しがタイムアウトしたか、報告すべきイベントが どのファイル記述子でも発生しなかったことを示します。 timeout が与えられた場合、処理を戻すまで待機する時間の長さを ミリ秒単位で指定します。timeout が省略されたり、負の値であったり、 あるいは None の場合、そのポーリングオブジェクトが監視している 何らかのイベントが発生するまでブロックします。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。