16.1。 選択する — I / Oの完了を待っています
このモジュールは、ほとんどのオペレーティングシステムで使用可能なselect()
およびpoll()
機能、Linux2.5以降で使用可能なepoll()
、およびほとんどのBSDで使用可能なkqueue()
へのアクセスを提供します。 Windowsでは、ソケットに対してのみ機能することに注意してください。 他のオペレーティングシステムでは、他のファイルタイプでも機能します(特に、Unixではパイプで機能します)。 通常のファイルで使用して、ファイルが最後に読み取られてから大きくなったかどうかを判断することはできません。
モジュールは以下を定義します:
- exception select.error
- エラーが発生したときに発生する例外。 付随する値は、
errno
の数値エラーコードと、C関数perror()
によって出力される対応する文字列を含むペアです。
- select.epoll([sizehint=-1])
(Linux 2.5.44以降でのみサポートされます。)エッジポーリングオブジェクトを返します。これは、I / Oイベントのエッジまたはレベルトリガーインターフェイスとして使用できます。 オブジェクトのエポーリングでサポートされるメソッドについては、以下のセクションエッジおよびレベルトリガーポーリング(epoll)オブジェクトを参照してください。
バージョン2.6の新機能。
- select.poll()
- (すべてのオペレーティングシステムでサポートされているわけではありません。)ファイル記述子の登録と登録解除をサポートし、I / Oイベントをポーリングするポーリングオブジェクトを返します。 オブジェクトのポーリングでサポートされるメソッドについては、以下のセクションオブジェクトのポーリングを参照してください。
- select.kqueue()
(BSDでのみサポートされています。)カーネルキューオブジェクトを返します。 kqueueオブジェクトでサポートされるメソッドについては、以下のセクション Kqueueオブジェクトを参照してください。
バージョン2.6の新機能。
- select.kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)
(BSDでのみサポートされています。)カーネルイベントオブジェクトを返します。 keventオブジェクトでサポートされるメソッドについては、以下のセクション Keventオブジェクトを参照してください。
バージョン2.6の新機能。
- select.select(rlist, wlist, xlist[, timeout])
これは、Unix
select()
システムコールへの簡単なインターフェイスです。 最初の3つの引数は、「待機可能なオブジェクト」のシーケンスです。ファイル記述子を表す整数、または fileno()という名前のパラメーターのないメソッドを持つオブジェクトがそのような整数を返します。rlist :読む準備ができるまで待つ
wlist :書き込みの準備ができるまで待ちます
xlist :「例外的な状態」を待ちます(システムがそのような状態と見なすものについては、マニュアルページを参照してください)
空のシーケンスは許可されますが、3つの空のシーケンスの受け入れはプラットフォームによって異なります。 (Unixで動作することは知られていますが、Windowsでは動作しません。)オプションの timeout 引数は、タイムアウトを秒単位の浮動小数点数として指定します。 timeout 引数を省略すると、少なくとも1つのファイル記述子の準備ができるまで関数がブロックされます。 タイムアウト値がゼロの場合、ポーリングが指定され、ブロックされることはありません。
戻り値は、準備ができているオブジェクトのリストのトリプルです。最初の3つの引数のサブセットです。 ファイル記述子の準備ができていない状態でタイムアウトに達すると、3つの空のリストが返されます。
シーケンスで受け入れ可能なオブジェクトタイプには、Pythonファイルオブジェクトがあります(例:
sys.stdin
、または open()または os.popen())によって返されるオブジェクト、 socket.socket()によって返されるソケットオブジェクト。 適切な fileno()メソッド(ランダムな整数だけでなく、実際にファイル記述子を返す)があれば、 wrapper クラスを自分で定義することもできます。ノート
Windows上のファイルオブジェクトは受け入れられませんが、ソケットは受け入れられます。 Windowsでは、基盤となる
select()
関数はWinSockライブラリによって提供され、WinSockに由来しないファイル記述子を処理しません。
- select.PIPE_BUF
このモジュールの select()、 poll()または同様のインターフェースによって書き込み準備ができていると報告されたファイルは、最大 PIPE_BUF の書き込みでブロックされないことが保証されます。バイト。 この値は、POSIXによって少なくとも512であることが保証されています。 可用性:Unix。
バージョン2.7の新機能。
16.1.1。 エッジおよびレベルトリガーポーリング(epoll)オブジェクト
http://linux.die.net/man/4/epoll
イベントマスク
絶え間ない 意味 EPOLLIN
読むことができます EPOLLOUT
書き込み可能 EPOLLPRI
読み取りのための緊急データ EPOLLERR
アソシエーションでエラー状態が発生しました。 fd EPOLLHUP
アソシエーションでハングアップが発生しました。 fd EPOLLET
エッジトリガー動作を設定します。デフォルトはレベルトリガー動作です。 EPOLLONESHOT
ワンショット動作を設定します。 1つのイベントが引き出されると、fdは内部的に無効になります EPOLLRDNORM
EPOLLIN
と同等EPOLLRDBAND
優先データ帯域を読み取ることができます。 EPOLLWRNORM
EPOLLOUT
と同等EPOLLWRBAND
優先データが書き込まれる場合があります。 EPOLLMSG
無視されます。
- epoll.close()
- epollオブジェクトの制御ファイル記述子を閉じます。
- epoll.fileno()
- コントロールfdのファイル記述子番号を返します。
- epoll.fromfd(fd)
- 指定されたファイル記述子からepollオブジェクトを作成します。
- epoll.register(fd[, eventmask])
fd記述子をepollオブジェクトに登録します。
ノート
すでに登録されているファイル記述子を登録すると、ポーリングオブジェクトの登録とは異なり、IOErrorが発生します。
- epoll.modify(fd, eventmask)
- レジスタファイル記述子を変更します。
- epoll.unregister(fd)
- epollオブジェクトから登録済みのファイル記述子を削除します。
- epoll.poll([timeout=-1[, maxevents=-1]])
- イベントを待ちます。 秒単位のタイムアウト(フロート)
16.1.2。 オブジェクトのポーリング
poll()
システムコールは、ほとんどのUnixシステムでサポートされており、多数のクライアントに同時にサービスを提供するネットワークサーバーのスケーラビリティを向上させます。 poll()
は、システムコールで対象のファイル記述子を一覧表示するだけでよいため、スケーリングが向上します。select()
はビットマップを作成し、対象のfdsのビットをオンにします。その後、ビットマップ全体を再度線形スキャン。 select()
はO(最大のファイル記述子)であり、poll()
はO(ファイル記述子の数)です。
- poll.register(fd[, eventmask])
ファイル記述子をポーリングオブジェクトに登録します。 poll()メソッドを今後呼び出すと、ファイル記述子に保留中のI / Oイベントがあるかどうかがチェックされます。 fd は、整数、または整数を返す fileno()メソッドを持つオブジェクトのいずれかです。 ファイルオブジェクトは
fileno()
を実装しているため、引数としても使用できます。eventmask は、チェックするイベントのタイプを記述するオプションのビットマスクであり、定数
POLLIN
、POLLPRI
、およびPOLLOUT
の組み合わせにすることができます。 ]、以下の表で説明されています。 指定しない場合、使用されるデフォルト値は3つのタイプのイベントすべてをチェックします。絶え間ない
意味
POLLIN
読み取るデータがあります
POLLPRI
読むべき緊急のデータがあります
POLLOUT
出力の準備ができました:書き込みはブロックされません
POLLERR
ある種のエラー状態
POLLHUP
電話を切る
POLLNVAL
無効なリクエスト:記述子が開かれていません
すでに登録されているファイル記述子を登録することはエラーではなく、記述子を1回だけ登録するのと同じ効果があります。
- poll.modify(fd, eventmask)
すでに登録されているfdを変更します。 これは
register(fd, eventmask)
と同じ効果があります。 登録されていないファイル記述子を変更しようとすると、エラー番号ENOENT
でIOError
例外が発生します。バージョン2.6の新機能。
- poll.unregister(fd)
ポーリングオブジェクトによって追跡されているファイル記述子を削除します。 register()メソッドと同様に、 fd は整数、または整数を返す fileno()メソッドを持つオブジェクトにすることができます。
登録されていないファイル記述子を削除しようとすると、
KeyError
例外が発生します。
- poll.poll([timeout])
- 登録されたファイル記述子のセットをポーリングし、報告するイベントまたはエラーがある記述子の
(fd, event)
2タプルを含む空の可能性のあるリストを返します。 fd はファイル記述子であり、 event は、その記述子の報告されたイベントにビットが設定されたビットマスクです—POLLIN
は入力を待機し、POLLOUT
記述子を書き込むことができることを示すなど。 空のリストは、呼び出しがタイムアウトし、報告するイベントがファイル記述子にないことを示します。 timeout が指定されている場合、システムが戻る前にイベントを待機する時間の長さをミリ秒単位で指定します。 timeout が省略、負、または None の場合、このポーリングオブジェクトのイベントが発生するまで呼び出しはブロックされます。
16.1.3。 Kqueueオブジェクト
- kqueue.close()
- kqueueオブジェクトの制御ファイル記述子を閉じます。
- kqueue.fileno()
- コントロールfdのファイル記述子番号を返します。
- kqueue.fromfd(fd)
- 指定されたファイル記述子からkqueueオブジェクトを作成します。
- kqueue.control(changelist, max_events[, timeout]) eventlist
- keventへの低レベルのインターフェース
- チェンジリストは、keventオブジェクトまたは
None
の反復可能である必要があります - max_eventsは0または正の整数でなければなりません
- 秒単位のタイムアウト(フロート可能)。 デフォルトは
None
で、永久に待機します
- チェンジリストは、keventオブジェクトまたは
16.1.4。 Keventオブジェクト
https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2
- kevent.ident
- イベントを識別するために使用される値。 解釈はフィルターによって異なりますが、通常はファイル記述子です。 コンストラクターでは、identはintまたはfileno()関数を持つオブジェクトのいずれかです。 keventは整数を内部に格納します。
- kevent.filter
カーネルフィルターの名前。
絶え間ない
意味
KQ_FILTER_READ
記述子を受け取り、読み取ることができるデータがある場合は常に返します
KQ_FILTER_WRITE
記述子を受け取り、書き込み可能なデータがある場合は常に返します
KQ_FILTER_AIO
AIOリクエスト
KQ_FILTER_VNODE
fflag で監視されている1つ以上の要求されたイベントが発生したときに返されます
KQ_FILTER_PROC
プロセスIDのイベントを監視する
KQ_FILTER_NETDEV
ネットワークデバイスでイベントを監視する[MacOSXでは使用できません]
KQ_FILTER_SIGNAL
監視されたシグナルがプロセスに配信されるたびに戻ります
KQ_FILTER_TIMER
任意のタイマーを確立します
- kevent.flags
フィルターアクション。
絶え間ない
意味
KQ_EV_ADD
イベントを追加または変更します
KQ_EV_DELETE
キューからイベントを削除します
KQ_EV_ENABLE
イベントを返すためのPermitscontrol()
KQ_EV_DISABLE
イベントを無効にします
KQ_EV_ONESHOT
最初の発生後にイベントを削除します
KQ_EV_CLEAR
イベントが取得された後、状態をリセットします
KQ_EV_SYSFLAGS
内部イベント
KQ_EV_FLAG1
内部イベント
KQ_EV_EOF
特定のEOF条件をフィルタリングする
KQ_EV_ERROR
戻り値を参照してください
- kevent.fflags
特定のフラグをフィルタリングします。
KQ_FILTER_READ
およびKQ_FILTER_WRITE
フィルターフラグ:絶え間ない
意味
KQ_NOTE_LOWAT
ソケットバッファの最低水準点
KQ_FILTER_VNODE
フィルターフラグ:絶え間ない
意味
KQ_NOTE_DELETE
unlink()が呼び出されました
KQ_NOTE_WRITE
書き込みが発生しました
KQ_NOTE_EXTEND
ファイルが拡張されました
KQ_NOTE_ATTRIB
属性が変更されました
KQ_NOTE_LINK
リンク数が変更されました
KQ_NOTE_RENAME
ファイルの名前が変更されました
KQ_NOTE_REVOKE
ファイルへのアクセスが取り消されました
KQ_FILTER_PROC
フィルターフラグ:絶え間ない
意味
KQ_NOTE_EXIT
プロセスが終了しました
KQ_NOTE_FORK
プロセスは fork()を呼び出しました
KQ_NOTE_EXEC
プロセスが新しいプロセスを実行しました
KQ_NOTE_PCTRLMASK
内部フィルターフラグ
KQ_NOTE_PDATAMASK
内部フィルターフラグ
KQ_NOTE_TRACK
fork()全体のプロセスに従います
KQ_NOTE_CHILD
NOTE_TRACK の子プロセスで返されます
KQ_NOTE_TRACKERR
子供に付けられない
KQ_FILTER_NETDEV
フィルターフラグ(Mac OS Xでは使用できません):絶え間ない
意味
KQ_NOTE_LINKUP
リンクがアップしています
KQ_NOTE_LINKDOWN
リンクがダウンしています
KQ_NOTE_LINKINV
リンク状態が無効です
- kevent.data
- 特定のデータをフィルタリングします。
- kevent.udata
- ユーザー定義の値。