Python 3.5 の「await」をいつ使用する必要がありますか?また、いつ使用を避けるべきですか?

Susan Sarandon
リリース: 2024-11-21 12:45:16
オリジナル
630 人が閲覧しました

When should I use Python 3.5's `await` and when should I avoid it?

Python 3.5 の await を採用すべき場合と回避すべき場合

Python 3.5 では、asyncio と await の導入により、非同期プログラミングが最前線に浮上しています。このパラダイム シフトにより、同時実行性の向上と実行の高速化が可能になりますが、その境界がわかりにくい場合があります。この記事では、いつ await を使用するか、いつ await を避けるべきかの微妙な点について詳しく説明します。

I/O 操作に await を採用する

await を採用する主な根拠は、await を利用する能力にあります。非同期コードの力。ネットワーク要求やファイル読み取りなどの I/O 操作を考慮してください。これらの操作を同期的に実行すると、通常、プログラム全体がブロックされ、各タスクの完了を待たなければなりません。対照的に、非同期コードを使用すると、これらの操作を同時に実行できるため、プログラムが他のタスクを処理できるようになります。

# Synchronous Way
download(url1)  # takes 5 sec.
download(url2)  # takes 5 sec.
# Total time: 10 sec.

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

上記の例では、非同期アプローチは半分の時間で完了し、費やされる無駄な時間を効果的に最小限に抑えます。 I/O 操作を待機しています。

同期の待機の誤用を避けるコード

await は I/O 操作の処理に優れていますが、無差別に同期コードに適用すべきではありません。 CPU に依存するタスクや単純なデータ操作などの同期コードは、非同期パラダイムの恩恵を受けず、実際に不必要なオーバーヘッドを引き起こす可能性があります。

# Synchronous Code That Should Remain Synchronous
def parse(html):
    # This function does not involve any I/O operations.
    links = extract_links_from_html(html)
    return links
ログイン後にコピー

同期コードを非同期としてキャストしても何の意味もなく、パフォーマンスの低下。

長時間実行される同期に関する特別な考慮事項操作

asyncio を使用するときに考慮すべき重要な側面は、長時間実行される同期操作が非同期エコシステムに与える影響です。実行に長時間かかる (50 ミリ秒以上など) 同期操作では、実行中のすべての非同期操作がフリーズする可能性があります。

async def extract_links(url):
    data = await download(url)
    links = parse(data)
    # If search_in_very_big_file() takes a long time,
    # all ongoing async functions (elsewhere in code) will be suspended.
    links_found = search_in_very_big_file(links)
ログイン後にコピー

このフリーズを防ぐには、そのような長時間実行操作を別のプロセスで実行することを検討するか、非同期コンテキスト内で I/O バインドされた操作にスレッド プールを使用します。

結論として、待機します。同時実行性の利点を活用するには、I/O 操作を処理するときに Python 3.5 を慎重に使用する必要があります。ただし、潜在的なパフォーマンスの落とし穴やボトルネックを防ぐために、非同期エコシステム内の同期コードや長時間実行操作の場合は避ける必要があります。これらの原則を慎重に考慮することで、Python 3.5 の非同期機能を効果的に利用できるようになります。

以上がPython 3.5 の「await」をいつ使用する必要がありますか?また、いつ使用を避けるべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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