このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

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

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

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

関数

select.poll()

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

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

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

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

クラス Poll

メソッド

poll.register(obj[, eventmask])

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

  • select.POLLIN - データを読込み可能

  • select.POLLOUT - データを書込み可能

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

eventmask のデフォルトは select.POLLIN | select.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 はストリームで発生したイベントを表し、 select.POLL* 上で説明した定数の組み合わせです。フラグ select.POLLHUPselect.POLLERR はいつでも(要求しなくても)返される可能性があるので、それに応じて振る舞う必要があります(該当ストリームは登録解除されていて、おそらくクローズしています)。なぜなら poll() のそれ以降のすべての呼び出しは、このストリームに設定したこれらのフラグで直ちに返されるからです。

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

CPython との違い

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

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

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

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

CPython との違い

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