uselect -- 一連のストリームのイベント待機

このモジュールは、該当する `CPython` モジュールのサブセットを実装しています。 詳しくはオリジナルの CPython ドキュメンテーションを参照してください: select.

このモジュールは、複数の ストリーム <stream> (操作の準備ができている select ストリーム)のイベントを効率的に待機する機能を提供します。

関数

uselect.poll()

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

uselect.select(rlist, wlist, xlist[, timeout])

一連のオブジェクトに対するアクティビティを待機します。

この関数は、いくつかの MicroPython ポートで互換性のために提供されており、効率的ではありません。代わりに Poll の利用を勧めます。

クラス Poll

メソッド

poll.register(obj[, eventmask])

ポーリングのための ストリーム <stream> obj を登録します。 eventmask は以下の論理和です:

  • uselect.POLLIN - データを読込み可能
  • uselect.POLLOUT - データを書込み可能

uselect.POLLHUPPP ``uselect.POLLERR のようなフラグは、入力イベントマスクとして有効ではないことに注意してください(これらは要求したかに関わらず poll() から返される迷惑なイベントです)。このセマンティクスは POSIX の仕様からきています。

eventmask のデフォルトは uselect.POLLIN | uselect.POLLOUT です。

同じ obj に対してこの関数を複数回呼び出しても大丈夫です。連続の呼出しは obj のイベントマスクを "eventmask の値に更新します(すなわち modify() として動作します)。

poll.unregister(obj)

obj をポーリングから登録解除します。

poll.modify(obj, eventmask)

obj のイベントマスクを変更します。 obj が登録されていない場合は ENOENT のエラーで OSError を発生させます。

poll.poll(timeout=-1)

登録済のオブジェクトの少なくとも1つが準備完了になるのを、オプションのタイムアウト値(ミリ秒単位)まで待ちます。 タイムアウト値 timeout 引数が指定されていない場合、または -1 を指定した場合はタイムアウトなしとなります。

戻り値はタプル (obj, event, ...) のリストです。プラットフォームやバージョンによってはタプルに他の要素もある可能性がありますので、サイズが 2 であると仮定しないでください。項目 event はストリームで発生したイベントを表し、 uselect.POLL* 上で説明した定数の組み合わせです。フラグ uselect.POLLHUPuselect.POLLERR はいつでも(要求しなくても)返される可能性があるので、それに応じて振る舞う必要があります(該当ストリームは登録解除されていて、おそらくクローズしています)。なぜなら poll() のそれ以降のすべての呼び出しは、このストリームに設定したこれらのフラグで直ちに返されるからです。

タイムアウトの場合、空リストが返されます。

CPython との違い

返されるタプルは、上記のように2つ以上の要素を含むことがあります。

poll.ipoll(timeout=-1, flags=0)

poll.poll() と同様ですが、代わりに「呼出し先所有タプル」をもたらすイテレータを返します。この関数は、ストリームをポーリングするのにの効率的で、メモリ割当てのない手段を提供します。

flags が 1 の場合、イベントのワンショット動作が採用されます。イベントが発生したストリームは、イベントマスクが自動的にリセットされるので(poll.modify(obj, 0) と同等)、新しいマスクが設定されるまで、そのストリームの新しいイベントは処理されません。この動作は、非同期 I/O スケジューラに役立ちます。

CPython との違い

この関数は MicroPython の拡張機能です。