Pythonにおける非同期処理は、プログラムの効率を大幅に向上させる重要な技術です。
本記事では、Pythonの非同期処理について、初心者にもわかりやすく解説し、asyncioを活用した実践的なコード例を紹介します。
非同期処理を正しく理解し、効率的なプログラムを作成できるようになるためのステップバイステップガイドです。
- 未経験者向けプログラミングスクール
- 現役エンジニアがしっかりサポート
- 卒業後も安心の転職・副業サポート
非同期処理とは?基本的な概念と重要性

非同期処理は、同時に複数の処理を行うための技術です。
Pythonでは、標準ライブラリとしてasyncioが用意されており、このモジュールを使用することで、効率的な並行処理が実現できます。
同期処理との違い
同期処理は、処理が順番に実行され、1つの処理が完了するまで次の処理が開始されません。
一方、非同期処理は、複数の処理が並行して実行されるため、待ち時間を効率的に活用できます。
非同期処理のメリット
非同期処理を利用することで、ネットワーク通信やファイルI/Oの待機時間を短縮し、プログラム全体の効率が向上します。
これにより、リアルタイムなアプリケーションやAPIのレスポンスを高速化することが可能です。
asyncioの基本的な使い方
asyncioはPythonの標準ライブラリであり、非同期処理を簡単に実装できるモジュールです。
以下のコードは、asyncioを使用して非同期処理を行う基本的な例です。
import asyncio
async def hello():
print('Hello...')
await asyncio.sleep(1)
print('...World')
asyncio.run(hello())
- 現役エンジニアからスキルを学べる
- 満足度は驚異の97.4%
- 300社以上のIT企業で研修に導入
- 毎日9時〜21時まで、無料カウンセリングを開催中!
asyncioの主要コンポーネント:asyncとawait

asyncとawaitは、Pythonの非同期処理において欠かせないキーワードです。
これらを使用することで、非同期な処理をシンプルに記述することができます。
asyncとは?
asyncは、関数を非同期関数にするためのキーワードです。
この関数内では、awaitを使用して別の非同期処理を待機することができます。
awaitとは?
awaitは、非同期処理を一時的に中断し、他の処理を並行して実行させるために使用されます。
例えば、await asyncio.sleep(1)のように記述することで、1秒間待機し、その間に他の処理を進めることができます。
タスクの管理
Pythonのasyncioを使用する際、複数のタスクを効率的に管理することが重要です。
asyncio.gather()を使用すると、複数のタスクを一度に並行実行できます。
イベントループとコルーチン:非同期処理の仕組み

非同期処理の中核となるのがイベントループとコルーチンです。
イベントループは、非同期関数を管理し、各コルーチンを適切なタイミングで実行します。
イベントループとは?
イベントループは、Pythonの非同期処理において、タスクの実行順序を制御する仕組みです。
asyncio.run()を使用してイベントループを開始します。
コルーチンとは?
コルーチンは、非同期的に実行される関数です。
通常の関数と異なり、途中で中断し、後から再開することが可能です。
イベントループの活用例
import asyncio
async def task1():
await asyncio.sleep(2)
print("Task 1 completed")
async def task2():
await asyncio.sleep(1)
print("Task 2 completed")
async def main():
await asyncio.gather(task1(), task2())
asyncio.run(main())
プログラミングスクール受講時には教育訓練給付制度を利用することで、受講料の最大80%の給付を受けることが可能です。
実際の活用例:非同期処理を使ったWebクローリング

非同期処理は、WebクローリングやAPIリクエストを効率化するために利用されることが多いです。
Pythonのライブラリであるaiohttpを使用して、非同期で複数のWebページにアクセスする方法を紹介します。
aiohttpのインストールと使用方法
まず、aiohttpをインストールする必要があります。
以下のコマンドでインストールが可能です:
pip install aiohttp
次に、以下のコードを使用して、複数のWebページに並行してアクセスする例を示します。
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
urls = ["http://example.com", "http://example.org"]
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks)
for result in results:
print(result)
asyncio.run(main())
まとめ:Pythonでの非同期処理の利便性

Pythonの非同期処理を学ぶことで、より効率的でスケーラブルなアプリケーションの開発が可能になります。
本記事で紹介したasyncioやaiohttpを活用し、非同期処理のメリットを最大限に引き出しましょう。
初心者でも実装可能なコード例を参考に、ぜひ実践してみてください。



コメント