非同期プログラミングは、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 サイトの他の関連記事を参照してください。

このチュートリアルでは、Pythonを使用してZIPFの法則の統計的概念を処理する方法を示し、法律の処理時にPythonの読み取りおよび並べ替えの効率性を示します。 ZIPF分布という用語が何を意味するのか疑問に思うかもしれません。この用語を理解するには、まずZIPFの法律を定義する必要があります。心配しないでください、私は指示を簡素化しようとします。 ZIPFの法則 ZIPFの法則は単に意味します。大きな自然言語のコーパスでは、最も頻繁に発生する単語は、2番目の頻繁な単語のほぼ2倍の頻度で表示されます。 例を見てみましょう。アメリカ英語の茶色のコーパスを見ると、最も頻繁な言葉は「thであることに気付くでしょう。

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

ノイズの多い画像を扱うことは、特に携帯電話や低解像度のカメラの写真でよくある問題です。 このチュートリアルでは、OpenCVを使用してPythonの画像フィルタリング手法を調査して、この問題に取り組みます。 画像フィルタリング:強力なツール 画像フィルター

PDFファイルは、クロスプラットフォームの互換性に人気があり、オペレーティングシステム、読み取りデバイス、ソフトウェア間でコンテンツとレイアウトが一貫しています。ただし、Python Plansing Plain Text Filesとは異なり、PDFファイルは、より複雑な構造を持つバイナリファイルであり、フォント、色、画像などの要素を含んでいます。 幸いなことに、Pythonの外部モジュールでPDFファイルを処理することは難しくありません。この記事では、PYPDF2モジュールを使用して、PDFファイルを開き、ページを印刷し、テキストを抽出する方法を示します。 PDFファイルの作成と編集については、私からの別のチュートリアルを参照してください。 準備 コアは、外部モジュールPYPDF2を使用することにあります。まず、PIPを使用してインストールします。 ピップはpです

このチュートリアルでは、Redisキャッシングを活用して、特にDjangoフレームワーク内でPythonアプリケーションのパフォーマンスを向上させる方法を示しています。 Redisのインストール、Django構成、およびパフォーマンスの比較をカバーして、Beneを強調します

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

データサイエンスと処理のお気に入りであるPythonは、高性能コンピューティングのための豊富なエコシステムを提供します。ただし、Pythonの並列プログラミングは、独自の課題を提示します。このチュートリアルでは、これらの課題を調査し、グローバルな承認に焦点を当てています

このチュートリアルでは、Python 3にカスタムパイプラインデータ構造を作成し、機能を強化するためにクラスとオペレーターのオーバーロードを活用していることを示しています。 パイプラインの柔軟性は、一連の機能をデータセットに適用する能力にあります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

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