18.5. "asyncio" --- 非同期 I/O、イベントループ、コルーチンおよびタスク
**********************************************************************

バージョン 3.4 で追加.

**ソースコード:** Lib/asyncio/

======================================================================

このモジュールは、コルーチン、ソケットあるいはその他リソースを使用した
多重 I/O、ネットワーククライアントあるいはサーバーの実行、およびその他
関連するプリミティブを使用した、シングルスレッド処理を並行で実行するコ
ードを作成するためのインフラストラクチャを提供します。ここではパッケー
ジ内容の詳細ページの一覧を示しています:

* さまざまなシステム固有の実装とプラグ可能な イベントループ;

* トランスポート および プロトコル の抽象化 (Twisted でのそれらに類
  似 );

* TCP、UDP、SSL、サブプロセス、遅延呼び出しなどの実体サポート (一部
  は システム依存);

* "concurrent.futures" モジュールの一つに類似するが、イベントループ
  で の使用に適応した "Future" クラス;

* 逐次処理の並行コードの作成を支援する、"yield from" (**PEP 380**)
  に 基づいたコルーチンおよびタスク;

* "Future" およびコルーチンのキャンセルのサポート;

* "threading" モジュール内のそれに類似した、シングルスレッド内のコル
  ー チン間で使用する 同期化プリミティブ;

* ブロッキング I/O 呼び出しを行うライブラリを絶対的かつ積極的に使う
  必 要がある時に、スレッドプールに仕事を投げるためのインタフェース

非同期プログラミングは古典的な "逐次" プログラミングと比べるとより複雑
です。非同期プログラミングで陥りやすい落とし穴の一覧とその回避方法につ
いて説明している Develop with asyncio を参照してください。開発の間は、
よくある問題を検出するために デバッグモードを有効にしてください 。

目次:

* 18.5.1. 基底イベントループ

  * 18.5.1.1. イベントループの実行

  * 18.5.1.2. 呼び出し (call)

  * 18.5.1.3. 遅延呼び出し

  * 18.5.1.4. Future

  * 18.5.1.5. タスク

  * 18.5.1.6. コネクションの作成

  * 18.5.1.7. 待ち受けコネクションの作成

  * 18.5.1.8. ファイル記述子の監視

  * 18.5.1.9. 低水準のソケット操作

  * 18.5.1.10. ホスト名の解決

  * 18.5.1.11. パイプの接続

  * 18.5.1.12. UNIX シグナル

  * 18.5.1.13. 実行者

  * 18.5.1.14. エラーハンドリング API

  * 18.5.1.15. デバッグモード

  * 18.5.1.16. サーバー

  * 18.5.1.17. ハンドル

  * 18.5.1.18. イベントループの例

    * 18.5.1.18.1. call_soon() を使った Hello World

    * 18.5.1.18.2. call_later() で現在の日時を表示する

    * 18.5.1.18.3. 読み込みイベント用ファイル記述子の監視

    * 18.5.1.18.4. SIGINT および SIGTERM 用のシグナルハンドラーの設
      定

* 18.5.2. イベントループ

  * 18.5.2.1. イベントループ関数

  * 18.5.2.2. 利用可能なイベントループ

  * 18.5.2.3. プラットフォームでのサポート

    * 18.5.2.3.1. Windows

    * 18.5.2.3.2. Mac OS X

  * 18.5.2.4. イベントループのポリシーとデフォルトポリシー

  * 18.5.2.5. イベントループポリシーインターフェース

  * 18.5.2.6. グローバルループポリシーへのアクセス

  * 18.5.2.7. Customizing the event loop policy

* 18.5.3. タスクとコルーチン

  * 18.5.3.1. コルーチン

    * 18.5.3.1.1. 例: Hello World コルーチン

    * 18.5.3.1.2. 例: 現在の日時を表示するコルーチン

    * 18.5.3.1.3. 例: コルーチンのチェーン

  * 18.5.3.2. InvalidStateError

  * 18.5.3.3. TimeoutError

  * 18.5.3.4. フューチャー

    * 18.5.3.4.1. 例: run_until_complete() を使ったフューチャ

    * 18.5.3.4.2. 例: run_forever() を使ったフューチャ

  * 18.5.3.5. タスク

    * 18.5.3.5.1. 例: タスクの並列実行

  * 18.5.3.6. タスク関数

* 18.5.4. Transports and protocols (callback based API)

  * 18.5.4.1. トランスポート

    * 18.5.4.1.1. BaseTransport

    * 18.5.4.1.2. ReadTransport

    * 18.5.4.1.3. WriteTransport

    * 18.5.4.1.4. DatagramTransport

    * 18.5.4.1.5. BaseSubprocessTransport

  * 18.5.4.2. プロトコル

    * 18.5.4.2.1. プロトコルクラス群

    * 18.5.4.2.2. コネクションコールバック

    * 18.5.4.2.3. ストリーミングプロトコル

    * 18.5.4.2.4. データグラムプロトコル

    * 18.5.4.2.5. フロー制御コールバック

    * 18.5.4.2.6. コルーチンとプロトコル

  * 18.5.4.3. プロトコルの例

    * 18.5.4.3.1. TCP Echo クライアントプロトコル

    * 18.5.4.3.2. TCP Echo サーバープロトコル

    * 18.5.4.3.3. UDP Echo クライアントプロトコル

    * 18.5.4.3.4. UDP Echo サーバープロトコル

    * 18.5.4.3.5. プロトコルを使ってデータを待つオープンソケットの登
      録

* 18.5.5. ストリーム (コルーチンベースの API)

  * 18.5.5.1. ストリーム関数

  * 18.5.5.2. StreamReader

  * 18.5.5.3. StreamWriter

  * 18.5.5.4. StreamReaderProtocol

  * 18.5.5.5. IncompleteReadError

  * 18.5.5.6. LimitOverrunError

  * 18.5.5.7. ストリームの例

    * 18.5.5.7.1. ストリームを使った TCP Echo クライアント

    * 18.5.5.7.2. ストリームを使った TCP Echo サーバー

    * 18.5.5.7.3. HTTP ヘッダーの取得

    * 18.5.5.7.4. ストリームを使ってデータを待つオープンソケットの登
      録

* 18.5.6. サブプロセス

  * 18.5.6.1. Windows でのイベントループ

  * 18.5.6.2. サブプロセスの作成: Process を使用した高水準 API

  * 18.5.6.3. サブプロセスの作成: subprocess.Popen を使用した低水準
    API

  * 18.5.6.4. 定数

  * 18.5.6.5. Process

  * 18.5.6.6. サブプロセスとスレッド

  * 18.5.6.7. サブプロセスの例

    * 18.5.6.7.1. トランスポートおよびプロトコルを使用したサブプロセ
      ス

    * 18.5.6.7.2. ストリームを使用したサブプロセス

* 18.5.7. 同期プリミティブ

  * 18.5.7.1. ロック

    * 18.5.7.1.1. Lock

    * 18.5.7.1.2. Event

    * 18.5.7.1.3. Condition

  * 18.5.7.2. セマフォ

    * 18.5.7.2.1. Semaphore

    * 18.5.7.2.2. BoundedSemaphore

* 18.5.8. キュー

  * 18.5.8.1. Queue

  * 18.5.8.2. PriorityQueue

  * 18.5.8.3. LifoQueue

    * 18.5.8.3.1. 例外

* 18.5.9. asyncio での開発

  * 18.5.9.1. asyncio のデバッグモード

  * 18.5.9.2. 取り消し

  * 18.5.9.3. 並行処理とマルチスレッド処理

  * 18.5.9.4. ブロック関数を正しく扱う

  * 18.5.9.5. ログ記録

  * 18.5.9.6. スケジュールされなかったコルーチンオブジェクトの検出

  * 18.5.9.7. 未処理の例外の検出

  * 18.5.9.8. コルーチンを正しくチェーンする

  * 18.5.9.9. 未完のタスクの破棄

  * 18.5.9.10. トランスポートとイベントループを閉じる

参考: "asyncio" モジュールは **PEP 3156** において設計されました。ト
  ランス ポートとプロトコルの動機付けとなる入門書は **PEP 3153** を参
  照してく ださい。
