uselect -- イベントの待機

このモジュールは、複数ストリームのイベント待機を効率的に行うための関数を提供します。

Pollbインスタンスとクラス

poll() Poll

Poll クラスのインスタンスを生成します。

戻り値:

Poll インスタンス。

class Poll
register(object, eventmask=POLLOUT | POLLOUT)

ポーリングのためにストリームオブジェクトを登録します。これで、ストリームオブジェクトはイベントに対して監視されるようになります。イベントが発生した場合、それは poll() の戻り値の一部となります。

このメソッドを同じストリームオブジェクトに対して再度呼び出すと、オブジェクトは再び登録されませんが、 modify() を呼び出す場合と同様に、 eventmask フラグが更新されます。

パラメータ:
  • object (FileIO) -- ポーリング用に登録されるストリーム。

  • eventmask (int) -- どのイベントを使うか。 POLLIN, POLLOUT あるいはその論理和 POLLIN | POLLOUT でなければなりません。

unregister(poll)

ポーリングからオブジェクトの登録を解除します。

パラメータ:

object (FileIO) -- ポーリングから登録解除されるストリーム。

modify(object, eventmask)

ストリームオブジェクトのイベント・マスクを変更する。

パラメータ:
  • object (FileIO) -- ポーリング用に登録されるストリーム。

  • eventmask (int) -- どのイベントを使うか。

例外:

OSError -- オブジェクトが登録されていない場合。エラーは ENOENT

poll(timeout=- 1) List[Tuple[FileIO, int]]

登録されたオブジェクトの少なくとも1つに、処理可能な新しいイベントや例外的な状態が発生するまで待ちます。

パラメータ:

timeout (int) -- タイムアウトをミリ秒単位で指定します。 0 を選ぶとすぐに戻り、 -1 を選ぶと無期限に待ちます。

戻り値:

タプルのリスト。イベントを持つオブジェクトごとに1つのタプル (object, eventmask, ...) があり、処理すべきイベントがない場合は空のタプルになります。 eventmask の値は、何が起こったかを示すポーリングフラグの組み合わせです。これは、たとえ登録されていなくても、 POLLERRPOLLHUP を含むことがあります。

ipoll(timeout=- 1, flags=1) Iterator[Tuple[FileIO, int]]

まず、 poll() と同様に、登録されたオブジェクトの少なくともひとつに、処理可能な新しいイベントや例外状態が発生するまで待ちます。

しかし、このメソッドはリストの代わりに、効率を上げるためにイテレータを返します。イテレータは一度にひとつの (object, eventmask, ...) タプルを生成し、次の値を生成する際にそれを上書きします。後で値が必要になった場合は、必ず明示的にコピーしてください。

パラメータ:
  • timeout (int) -- タイムアウトをミリ秒単位で指定します。 0 を選ぶとすぐに戻り、 -1 を選ぶと無期限に待ちます。

  • flags (int) -- 1 に設定すると、イベントに対するワンショット動作が採用されます。これは、イベントが発生したストリームは poll.modify(obj, 0) を使ってイベントマスクが自動的にリセットされることを意味します。この方法では、そのようなストリームの新しいイベントは、新しいマスクが modify() で設定されるまで処理されないので、非同期 I/O スケジューラには便利です。

イベントマスクフラグ

POLLIN: int

データを読み込むことができる。

POLLOUT: int

さらに多くのデータを書き込むことができる。

POLLERR: int

関連するストリームでエラー状態が発生した。明示的に処理しないと、それ以降に poll() を起動したときにすぐに戻ってしまう可能性があります。

POLLHUP: int

関連するストリームでハングアップが起こった。明示的に処理するか、 poll() をさらに呼び出すとすぐに戻ってくる可能性があります。

サンプルコード

このモジュールを使ったデモは projects website を参照してください。