プログラマーの Python Async – ストリームと Web クライアント

1/3 ページ

asyncio の適用は、思ったより難しい場合があります。 私の新しい本の抜粋で、ストリームを使用して非同期 Web クライアントを実装する方法を見つけてください。 プログラマーの Python: 非同期

プログラマーの Python:
非同期
スレッド、プロセス、非同期など

印刷本として入手可能になりました:Amazon

コンテンツ

1) Python のライトニング ツアー

Python の起源、基本的な Python、データ構造、制御構造 – ループ、スペースの問題、条件とインデント、パターン マッチング、すべてがオブジェクト – 参照、関数、オブジェクトとクラス、継承、メインとモジュール、Python の IDE、Pythonic – Theメタ哲学、次の場所、要約。

2) 非同期の説明

シングルスレッド、 プロセス、 I/O バウンドおよび CPU バウンド、スレッド、ロック、デッドロック、複数のスレッドを使用するプロセス、シングル スレッドの非同期、イベント、イベントまたはスレッド、コールバック ヘル、複数の CPU – 同時実行、概要。

3) 処理ベースの並列処理

プロセス クラス、デーモン、プロセスの待機、最初のプロセスの完了の待機、Pi の計算、Fork v Spawn、Forkserve、開始方法の制御、概要。

4) スレッド

スレッド クラス、スレッドと GIL、スレッド ユーティリティ、デーモン スレッド、スレッドの待機、ローカル変数、スレッド ローカル ストレージ、複数のスレッドによる Pi の計算、I/O バウンド スレッド、Sleep(0)、タイマー オブジェクト、概要。

5) ロックとデッドロック

競合状態、ハードウェアの問題または Heisenbug、ロック、ロックとプロセス、デッドロック、コンテキスト管理ロック、再帰ロック、セマフォ、アトミック操作、アトミック CPython、ロックフリー コード、ロックを使用した Pi の計算、概要。

6) 同期

結合、最初から最後まで、イベント、バリア、条件オブジェクト、普遍的な条件オブジェクト、概要。

7) データの共有

キュー、パイプ、スレッドのキュー、共有メモリ、共有 ctypes、Raw 共有メモリ、共有メモリ、マネージャー、コンピューティング Pi 、概要。

8) プロセスプール

プール プロセスの待機、AsyncResult を使用した Pi の計算、Map_async、Starmap_async、即時結果 – imap、MapReduce、共有とロック、概要。

9) プロセスマネージャー

SyncManager、プロキシの仕組み、ロック、マネージャーを使用した Pi の計算、カスタム マネージャー、カスタム データ タイプ、BaseProxy、プロパティ プロキシ、リモート マネージャー、リモート プロシージャ コール、最終的な考え、まとめ。

10) サブプロセス

プログラムの実行、入力/出力、Popen、相互作用、ノンブロッキング読み取りパイプ、サブプロセスの使用、概要。

11) 先物

Futures、Executors、I/O-Bound の例、Future の待機、Future Done コールバック、例外の処理、データのロックと共有、パラメーターのロックとプロセス、初期化子を使用した共有グローバルの作成、プロセス マネージャーを使用したリソースの共有、Future の共有およびデッドロック、先物、プロセス プールまたは同時先物を使用した Pi の計算、概要。

12) 基本非同期

抽出 1 基本非同期

コールバック、Future と Await、コルーチン、Await、Awaiting Sleep、タスク、実行順序、タスクと Future、コルーチンの待機、シーケンシャルとコンカレント、タスクのキャンセル、例外の処理、共有変数とロック、コンテキスト変数、キュー、概要。

13) asyncio の使用

ストリーム、Web ページのダウンロード、サーバー、Web サーバー、SSL サーバー、ストリームの使用、ブロッキングからノンブロッキングへの変換、スレッドでの実行、スレッドを使用しない理由、CPU バウンド タスク、非同期ベースのモジュール、他のイベントの操作ループ – Tkinter、サブプロセス、概要。

14) 低レベル API

抽出 1 – ストリームと Web クライアント

イベント ループ、ループの使用、プロセスでのタスクの実行、asyncio を使用した Pi の計算、ネットワーク関数、
トランスポートとプロトコル、UDP サーバー、UDP クライアント、ブロードキャスト UDP、ソケット、イベント ループの実装、適切な非同期操作の条件、概要。

付録 I Visual Studio Code での Python

これまでの asyncio の調査で、使用した真の非同期コルーチンは asyncio.sleep だけです。 これにより、メイン スレッドが解放されてイベント ループを実行できるようになりますが、実際には、何が起こっているのかを説明するのに役立つ以外には、あまり効果がありません。 別の言い方をすれば、asyncio.sleep を使用しないと、イベント ループを使用する場合でも、本質的に同期システムになります。 この章では、実際に有用で効率の向上を示す asyncio でできることを見ていきます。

asyncio モジュールは、主に非同期ネットワーク接続で動作するように設計されています。 この重要ではあるが制限されたアプリケーションを超えたい場合は、asyncio を拡張するライブラリを使用するか、独自の非同期拡張機能を作成する必要があります。

明確にするために、asyncio はローカル ファイルを非同期に操作するのに役立ちませんし、非同期のユーザー操作を処理する方法も提供しませんが、両方を実行するように適応させることは可能であり、ほとんどの同様のアプリケーション用の既存のモジュールがあります。

さらに驚くべきことは、高レベルのネットワーク機能が提供されていないことです。 たとえば、HTML ページの非同期ダウンロードはありません。 実際、最近まで、すべてのネットワーク対話は低レベルで実行されていましたが、ほとんどの場合、低レベル API とそのパイプ、ソケット、およびトランスポートを無視して、単にストリームを使用できます。

ストリーム

ストリームは、ソケットを使用して実装されたネットワーク接続の高レベルのコルーチン実装です。 これらは標準ファイルとほぼ同じように機能しますが、非同期であるため、単一のスレッドを使用して、多数、数百、数千もの接続を操作できます。

ファイルと同様に、ストリームを開く必要があります。

reader, writer = asyncio.open_connection(host = None, port = None)

接続をカスタマイズするために使用できる追加のパラメーターが多数ありますが、この単純な形式は、インターネット サーバーへのほとんどの接続に使用できます。

ストリームを開くと、StreamReader と StreamWriter で構成されるタプルが返されます。 これらは、おなじみのファイル オブジェクトと非常によく似たメソッドを持ち、非同期であることを除けば、同じように機能します。 ファイル オブジェクトについて詳しく知りたい場合は、以下を参照してください。 プログラマーの Python: すべてがデータ ISBN: 978-1871962598.

ストリームリーダー

ストリームの読み取りには、次のメソッドが一般的に使用されます。

デフォルトの n = -1 は、ファイルの終わりシグナル (EOF) が受信されるまで読み取り、読み取ったすべてのバイトを返します。

EOF が受信され、n が見つからなかった場合、メソッドは部分的に読み取られたデータを返します。 EOF を受信し、内部バッファーが空の場合は、空のバイト オブジェクトを返します。

  • readexactly(n) – 正確に n バイトを読み取り、n を読み取る前に EOF に達した場合は IncompleteReadError を発生させます
    IncompleteReadError.partial 属性を使用して、部分的に読み取られたデータを取得します。

  • readuntil(separator = b’n’) – セパレーターが見つかるまでストリームからデータを読み取ります。
    デフォルトでは、区切り文字として n、つまり改行を使用するため、readline と同じになります。

読み取られたデータの量が構成されたストリーム制限を超えると、 LimitOverrunError 例外が発生し、データは内部バッファーに残され、再度読み取ることができます。 完全なセパレーターが見つかる前に EOF に達した場合、IncompleteReadError 例外が発生し、内部バッファーがリセットされます。
IncompleteReadError.partial 属性には、セパレーターの一部が含まれる場合があります。

呼び出しを満たす十分なデータが用意されていない可能性があるため、読み取りメソッドはすべてコルーチンであることに注意してください。 この場合、コルーチンは中断され、メイン スレッドは解放されます。 つまり、データを読み取る関数の呼び出しは非同期コルーチンです。 また、トランザクションの終了を通知するために EOF を使用することへの言及がありますが、一般に EOF はソケットを扱う場合には特に有用ではないことに注意してください。 ソケットは、必要がなくなるまで開いたままにする傾向があり、データは通常、処理できる有用なデータのチャンクを読み取ったときに解決できる何らかの形式で送信されます。 一般に、EOF を待機すると、サーバーがタイムアウトしてソケットを閉じるまで長時間待機します。

.

Leave a Comment

Your email address will not be published. Required fields are marked *