select
-- 一連のストリームのイベント待機¶
このモジュールは、該当する :term:`CPython` モジュールのサブセットを実装しています。
詳しくはオリジナルの CPython ドキュメンテーションを参照してください: select
.
このモジュールは、複数の ストリーム <stream> (操作の準備ができている select ストリーム)のイベントを効率的に待機する機能を提供します。
関数¶
-
select.
poll
()¶ Poll クラスのインスタンスを作成します。
-
select.
select
(rlist, wlist, xlist[, timeout])¶ 一連のオブジェクトに対するアクティビティを待機します。
この関数は、いくつかの MicroPython ポートで互換性のために提供されており、効率的ではありません。代わりに
Poll
の利用を勧めます。
クラス Poll
¶
メソッド¶
-
poll.
register
(obj[, eventmask])¶ ポーリングのための ストリーム <stream> 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.POLLHUP
とselect.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 の拡張機能です。