16.1. select — I / Oの完了を待っています—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/select
移動先:案内検索

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 は、チェックするイベントのタイプを記述するオプションのビットマスクであり、定数POLLINPOLLPRI、およびPOLLOUTの組み合わせにすることができます。 ]、以下の表で説明されています。 指定しない場合、使用されるデフォルト値は3つのタイプのイベントすべてをチェックします。

絶え間ない

意味

POLLIN

読み取るデータがあります

POLLPRI

読むべき緊急のデータがあります

POLLOUT

出力の準備ができました:書き込みはブロックされません

POLLERR

ある種のエラー状態

POLLHUP

電話を切る

POLLNVAL

無効なリクエスト:記述子が開かれていません

すでに登録されているファイル記述子を登録することはエラーではなく、記述子を1回だけ登録するのと同じ効果があります。

poll.modify(fd, eventmask)

すでに登録されているfdを変更します。 これはregister(fd, eventmask)と同じ効果があります。 登録されていないファイル記述子を変更しようとすると、エラー番号ENOENTIOError例外が発生します。

バージョン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で、永久に待機します


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
ユーザー定義の値。