非同期プログラミングは、Python 開発においてますます重要になっています。 現在では asyncio
が標準ライブラリ コンポーネントとなり、多くの互換性のあるサードパーティ パッケージとなっているため、このパラダイムは今後も存続します。このチュートリアルでは、非ブロッキング コードの主要な使用例である、非同期 HTTP リクエストに HTTPX
ライブラリを使用する方法を示します。
ノンブロッキング コードとは何ですか?
「非同期」、「ノンブロッキング」、「同時」などの用語は混乱を招く可能性があります。 基本的に:
- 非同期ルーチンは結果を待っている間「一時停止」でき、他のルーチンを同時に実行できます。
- これにより、真の並列処理が関与していない場合でも、同時実行のように見えます。
非同期コードはブロックを回避し、結果を待っている間に他のコードを実行できるようにします。 asyncio
ライブラリはこのためのツールを提供し、aiohttp
は特殊な HTTP リクエスト機能を提供します。 HTTP リクエストは、サーバーの応答を待機する必要があり、他のタスクを効率的に実行できる期間であるため、非同期に最適です。
セットアップ
Python 環境が構成されていることを確認してください。 必要に応じて、仮想環境ガイドを参照してください (Python 3.7 が必要です)。 HTTPX
:
pip install httpx==0.18.2
HTTPX を使用した HTTP リクエストの作成
この例では、Pokémon API への 1 つの GET リクエストを使用して、ミュウ (ポケモン #151) のデータを取得します。
import asyncio import httpx async def main(): url = 'https://pokeapi.co/api/v2/pokemon/151' async with httpx.AsyncClient() as client: response = await client.get(url) pokemon = response.json() print(pokemon['name']) asyncio.run(main())
async
はコルーチンを指定します。 await
はイベント ループに制御を渡し、結果が利用可能になると実行を再開します。
複数のリクエストを行う
非同期性の真の力は、多数のリクエストを行うときに明らかです。この例では、最初の 150 匹のポケモンのデータを取得します:
import asyncio import httpx import time start_time = time.time() async def main(): async with httpx.AsyncClient() as client: for number in range(1, 151): url = f'https://pokeapi.co/api/v2/pokemon/{number}' response = await client.get(url) pokemon = response.json() print(pokemon['name']) asyncio.run(main()) print(f"--- {time.time() - start_time:.2f} seconds ---")
実行の時間を計測します。 これを同期アプローチと比較してください。
同期リクエストの比較
同等の同期:
import httpx import time start_time = time.time() client = httpx.Client() for number in range(1, 151): url = f'https://pokeapi.co/api/v2/pokemon/{number}' response = client.get(url) pokemon = response.json() print(pokemon['name']) print(f"--- {time.time() - start_time:.2f} seconds ---")
実行時の違いに注意してください。 HTTPX
の接続プーリングは差異を最小限に抑えますが、asyncio はさらなる最適化を提供します。
高度な非同期テクニック
優れたパフォーマンスを得るには、asyncio.ensure_future
と asyncio.gather
を使用してリクエストを同時に実行します。
import asyncio import httpx import time start_time = time.time() async def fetch_pokemon(client, url): response = await client.get(url) return response.json()['name'] async def main(): async with httpx.AsyncClient() as client: tasks = [asyncio.ensure_future(fetch_pokemon(client, f'https://pokeapi.co/api/v2/pokemon/{number}')) for number in range(1, 151)] pokemon_names = await asyncio.gather(*tasks) for name in pokemon_names: print(name) asyncio.run(main()) print(f"--- {time.time() - start_time:.2f} seconds ---")
これにより、リクエストが同時に実行されるため、実行時間が大幅に短縮されます。 合計時間は、最長の単一リクエストの期間に近づきます。
結論
HTTPX
と非同期プログラミングを使用すると、複数の HTTP リクエストのパフォーマンスが大幅に向上します。このチュートリアルでは、asyncio
の基本的な概要を説明します。その機能をさらに調べて、Python プロジェクトを強化してください。 代替の非同期 HTTP リクエスト処理については、aiohttp
を検討することを検討してください。
以上がHTTPX と asyncio を使用した Python の非同期 HTTP リクエストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

この記事では、Pythonライブラリである美しいスープを使用してHTMLを解析する方法について説明します。 find()、find_all()、select()、およびget_text()などの一般的な方法は、データ抽出、多様なHTML構造とエラーの処理、および代替案(SEL

Pythonの統計モジュールは、強力なデータ統計分析機能を提供して、生物統計やビジネス分析などのデータの全体的な特性を迅速に理解できるようにします。データポイントを1つずつ見る代わりに、平均や分散などの統計を見て、無視される可能性のある元のデータの傾向と機能を発見し、大きなデータセットをより簡単かつ効果的に比較してください。 このチュートリアルでは、平均を計算し、データセットの分散の程度を測定する方法を説明します。特に明記しない限り、このモジュールのすべての関数は、単に平均を合計するのではなく、平均()関数の計算をサポートします。 浮動小数点数も使用できます。 ランダムをインポートします インポート統計 fractiから

この記事では、深い学習のためにTensorflowとPytorchを比較しています。 関連する手順、データの準備、モデルの構築、トレーニング、評価、展開について詳しく説明しています。 特に計算グラップに関して、フレームワーク間の重要な違い

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

この記事では、コマンドラインインターフェイス(CLI)の構築に関するPython開発者をガイドします。 Typer、Click、Argparseなどのライブラリを使用して、入力/出力の処理を強調し、CLIの使いやすさを改善するためのユーザーフレンドリーな設計パターンを促進することを詳述しています。

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

この記事では、Pythonにおける仮想環境の役割について説明し、プロジェクトの依存関係の管理と競合の回避に焦点を当てています。プロジェクト管理の改善と依存関係の問題を減らすための作成、アクティベーション、およびメリットを詳しく説明しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック



