ホームページ > バックエンド開発 > Python チュートリアル > Python 3.5 非同期プログラミングで「await」をいつ使用する必要がありますか?また、その制限は何ですか?

Python 3.5 非同期プログラミングで「await」をいつ使用する必要がありますか?また、その制限は何ですか?

Susan Sarandon
リリース: 2024-11-26 17:06:14
オリジナル
915 人が閲覧しました

When should I use `await` in Python 3.5 asynchronous programming, and what are its limitations?

Python 3.5 で await を使用する場合と制限事項

Python 3.5 の非同期は、主に asyncio ライブラリと async/ によって促進されます。 await 構文。これらの構造をいつ、どこで利用するかを理解することは、非同期アプリケーションのパフォーマンスを最適化するために重要です。

await を使用するかどうかは、コードの性質によって決まります。デフォルトでは、コードは同期的に実行されます。非同期を導入するには、async def を使用して関数を定義し、await で呼び出します。ただし、同期コードと非同期コードのどちらが当面のタスクに適しているかを判断することが重要です。

一般的な経験則として、I/O 操作を処理する場合は await を使用することが有益です。ネットワーク リクエストやデータベース呼び出しなどの I/O 操作は本質的に非同期であることが多く、イベント ループに委任することで大幅に高速化できます。

たとえば、次の同期コードを考えてみましょう:

download(url1)  # takes 5 seconds
download(url2)  # takes 5 seconds
# Total time: 10 seconds
ログイン後にコピー

asyncio と await を使用すると、同じコードを非同期で書き直すことができ、合計実行時間を長い時間に比べて短縮できます。 Operation:

await asyncio.gather(
    async_download(url1),  # takes 5 seconds
    async_download(url2),   # takes 5 seconds
)
# Total time: only 5 seconds (plus minimal asyncio overhead)
ログイン後にコピー

また、非同期関数は必要に応じて同期コードを自由に利用できることに注意することも重要です。ただし、正当な理由なく同期コードを非同期にキャストすることは、本質的に何のメリットももたらさないため避けるべきです。

非同期コードに関する重要な考慮事項の 1 つは、長時間実行される同期操作によってプログラム全体がフリーズする可能性があることです。 。特定のしきい値 (50 ミリ秒など) を超える同期操作は、同時非同期タスクをブロックする可能性があります。

この問題を軽減するには、そのような操作を別のプロセスにアウトソーシングし、その結果を待つことができます。

executor = ProcessPoolExecutor(2)

async def extract_links(url):
    ...
    # If search_in_very_big_file() is a long synchronous operation, offload it to a separate process
    links_found = await loop.run_in_executor(executor, search_in_very_big_file, links)
ログイン後にコピー

最後に、I/O バウンドの同期関数を統合できることは注目に値します。 run_in_executor() と ThreadPoolExecutor を使用して、マルチプロセッシングに関連するオーバーヘッドを最小限に抑える非同期コード。

以上がPython 3.5 非同期プログラミングで「await」をいつ使用する必要がありますか?また、その制限は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート