<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「コルーチン」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/coroutine/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Tue, 10 Mar 2026 21:09:31 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「コルーチン」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】async/awaitを用いた非同期プログラミングの基本</title>
		<link>https://tech.nkhn37.net/python-asyncio-async-await/</link>
					<comments>https://tech.nkhn37.net/python-asyncio-async-await/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Sat, 24 Feb 2024 20:00:00 +0000</pubDate>
				<category><![CDATA[asyncio]]></category>
		<category><![CDATA[async]]></category>
		<category><![CDATA[await]]></category>
		<category><![CDATA[コルーチン]]></category>
		<category><![CDATA[マルチスレッド]]></category>
		<category><![CDATA[マルチプロセス]]></category>
		<category><![CDATA[同期処理]]></category>
		<category><![CDATA[非同期処理]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=10126</guid>

					<description><![CDATA[Pythonで、async や await を用いた非同期プログラミングを実装する基本について解説します。 非同期プログラミング 近年では、非同期プログラミングが多くの支持を得ています。Python は、これまでジェネレ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pythonで、<span class="jinr-d--text-color d--marker1 d--bold"><code>async</code> や <code>await</code> を用いた非同期プログラミングを実装する基本</span>について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">非同期プログラミング</h2>



<p class="wp-block-paragraph">近年では、非同期プログラミングが多くの支持を得ています。Python は、これまでジェネレータをベースにした非同期プログラミングの仕組みがありましたが、Python  3.5 で新しく <span class="jinr-d--text-color d--marker1 d--bold"><code>async</code></span> と <span class="jinr-d--text-color d--marker1 d--bold"><code>await</code></span> を用いた非同期プログラミングが導入されています。</p>



<p class="wp-block-paragraph">また、<span class="jinr-d--text-color d--marker1 d--bold"><code>asyncio</code></span> モジュールは、イベントループの標準実装など多くの非同期機能を提供しています。</p>



<p class="wp-block-paragraph">この記事では、<span class="jinr-d--text-color d--marker1 d--bold"><code>async</code> や <code>await</code> を用いて非同期プログラミングを実装する基本</span>について紹介していきます。</p>



<p class="wp-block-paragraph">具体的な非同期プログラミングの説明の前に、同期・非同期処理、マルチスレッド・マルチプロセスの処理方式の違いやコルーチン、協調的マルチタスクという考え方を紹介します。これらの考え方に理解がある方は、読み飛ばしていただいて構いません。</p>



<h3 class="wp-block-heading jinr-heading d--bold">同期・非同期処理、マルチスレッド・マルチプロセス</h3>



<p class="wp-block-paragraph">非同期プログラミングについて、十分に理解するには「<span class="jinr-d--text-color d--marker1 d--bold">同期処理</span>」「<span class="jinr-d--text-color d--marker1 d--bold">非同期処理</span>」「<span class="jinr-d--text-color d--marker1 d--bold">マルチスレッド</span>」「<span class="jinr-d--text-color d--marker1 d--bold">マルチプロセス</span>」の違いをしっかりと理解しておく必要があります。以下の図を用いてそれぞれのイメージを明確化しておきましょう。</p>



<p class="wp-block-paragraph">以下は、処理 A と処理 B を実行する 2 つのタスク（タスク 1 およびタスク 2）を実行している場合の図です。線は I/O を表しており、処理 A と処理 B の間に I/O による待ち時間が発生していると理解してください。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="484" src="https://tech.nkhn37.net/wp-content/uploads/2024/02/image-1024x484.png" alt="同期・非同期処理・マルチスレッド・マルチプロセスの違い" class="wp-image-10302" srcset="https://tech.nkhn37.net/wp-content/uploads/2024/02/image-1024x484.png 1024w, https://tech.nkhn37.net/wp-content/uploads/2024/02/image-300x142.png 300w, https://tech.nkhn37.net/wp-content/uploads/2024/02/image-768x363.png 768w, https://tech.nkhn37.net/wp-content/uploads/2024/02/image.png 1359w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h4 class="wp-block-heading jinr-heading d--bold">同期処理</h4>



<p class="wp-block-paragraph">同期処理では、1 つのCPU内の 1 スレッドで順次処理を実行します。同期処理の場合、タスク 1 が完了するまでタスク 2 は開始されません。タスクが 1 つずつ処理されるため最も単純で理解しやすい方法ですが、I/O 待ちが多い場合には、計算資源を有効に使いにくくなります。</p>



<h4 class="wp-block-heading jinr-heading d--bold">非同期処理</h4>



<p class="wp-block-paragraph">非同期処理では、タスク 1 の処理 A が終了して I/O 待ちになったタイミングで、タスク 2 の処理 A が開始されます。この処理は同一スレッド内で実行され、タスク 1 は I/O 待ちになったタイミングで制御を開放することでタスク 2 の処理が開始します。</p>



<p class="wp-block-paragraph">その後、タスク 2 が I/O 待ちになり制御を開放した時に、待機していたタスク 1 の処理 B が実行されます。このように非同期処理では、タスクがオーバーラップすることから効率よく処理が実行できます。</p>



<p class="wp-block-paragraph">このように、非同期処理は複数処理が同時に CPU 上で実行されるわけではなく、I/O 待ちの間に他のタスクへ切り替えることで全体の待ち時間を減らす考え方です。</p>



<p class="wp-block-paragraph">マルチスレッドやマルチプロセスとは違い、非同期処理は、OS 機能を利用しながら、アプリケーションレベルのイベントループによってタスクの切り替えを制御します。</p>



<h4 class="wp-block-heading jinr-heading d--bold">マルチスレッド</h4>



<p class="wp-block-paragraph">マルチスレッドでは、同一 CPU 内の異なるスレッドでタスクが実行されます。図の例ではタスク 1 はスレッド 1 で、タスク 2 はスレッド 2 で実行されています。</p>



<p class="wp-block-paragraph">マルチスレッドでは、同一のメモリ空間を共有するため、データ共有などを含めて効率よく処理ができますが、データの安全性に関する注意が必要となります。マルチスレッドの処理は、アプリケーションではなく OS により制御されます。</p>



<h4 class="wp-block-heading jinr-heading d--bold">マルチプロセス</h4>



<p class="wp-block-paragraph">マルチプロセスでは、複数プロセスを起動し、それぞれ独立したメモリ空間で実行されます。複数 CPU コアを利用して並列実行されるかは OS のスケジューラに依存します。図の例では、タスク 1 はCPU 1、タスク 2 は CPU 2 で実行されています。</p>



<p class="wp-block-paragraph">マルチプロセスは、各プロセスが独立したメモリ空間を持つため、他のプロセスの影響を受けずに動作できます。ただし、プロセス間のデータ交換が必要になったり、プロセス生成時のオーバーヘッドがかかったりといった特徴もあるため、よく検討して使用する必要があります。マルチプロセスの処理は、アプリケーションではなく OSにより制御されます。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">Python におけるマルチスレッド、マルチプロセスに関する説明は以下のページを参考にしてください。</p>



<ul class="wp-block-list jinr-list">
<li><a href="https://tech.nkhn37.net/python-threading-multithread/" target="_blank" rel="noreferrer noopener">threadingによるマルチスレッド処理の基本</a></li>



<li><a href="https://tech.nkhn37.net/python-multiprocessing-basics/" target="_blank" rel="noreferrer noopener">multiprocessingによるマルチプロセスの基本</a></li>



<li><a href="https://tech.nkhn37.net/python-concurrent-futures-basics/" target="_blank" rel="noreferrer noopener">concurrent.futuresによる並列処理の基本</a></li>
</ul>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">コルーチン</h3>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">コルーチン</span>とは、プログラムの実行中に特定のポイントで停止し、後でそのポイントから実行を再開できる特殊な関数のことを言います。コルーチンは以下のような特徴を持っています。</p>



<ol class="wp-block-list jinr-list">
<li><strong>実行の中断と再開</strong>：途中で実行を停止し、操作が完了した後に再開することができます。</li>



<li><strong>状態の保持</strong>：実行を中断する際に、現在の状態を保存し、再開時にその状態から処理を再開できます。</li>



<li><strong>非同期処理の簡素化</strong>：複雑な非同期コードを同期コードのように直感的に記述できます。</li>
</ol>



<p class="wp-block-paragraph">このように、コルーチンは非同期処理プログラミングのコードの複雑さを軽減し、効率的な実行フローを実現できるものです。Python では、コルーチンを <code>async</code> や <code>await</code> といったキーワードを用いて実現します。</p>



<p class="wp-block-paragraph">なお、以降説明でタスクとコルーチンという言葉が混乱しやすいかもしれません。<span class="jinr-d--text-color d--marker1"><strong>コルーチン</strong>は、特定のポイントで停止し、後でそのポイントから実行開始できる関数自体</span>です。一方で、<span class="jinr-d--text-color d--marker1"><strong>タスク</strong>は、それらのコルーチンを実行する単位</span>で、イベントループ内でスケジューリングされるものです。タスクという箱の中にコルーチンの関数が紐づいているようなイメージをしてもらうと分かりやすいかと思います。</p>



<h3 class="wp-block-heading jinr-heading d--bold">協調的マルチタスク</h3>



<p class="wp-block-paragraph">非同期プログラミングにおける中心的となる考え方として<span class="jinr-d--text-color d--marker1 d--bold">協調的マルチタスク</span>と呼ばれるものがあります。協調的マルチタスクでは、OS には頼らず、その代わりに各タスクが待機状態になったら自発的に制御を開放し、他の処理に制御を渡します。</p>



<p class="wp-block-paragraph">一方で、OS はコンテキストスイッチによりプロセスやスレッドを直接制御することが一般的です。機能設計が不十分なプロセス、スレッドによりシステム全体が不安定になることを防ぐためです。</p>



<p class="wp-block-paragraph">アプリケーション開発で、協調的マルチタスクを実現する際には、通常は 1 つのプロセス、1 つのスレッド上でイベントループを動かし、その中で複数タスクを切り替えながら実行します。</p>



<p class="wp-block-paragraph">Python の非同期プログラミングでは、<span class="jinr-d--text-color d--marker1 d--bold"><code>asyncio</code></span> モジュールでタスク生成やイベントループといった協調的マルチタスクを実現する機能が提供されています。</p>



<h2 class="wp-block-heading jinr-heading d--bold"><code>async</code> / <code>await</code> を用いた非同期プログラミング</h2>



<p class="wp-block-paragraph">Python の非同期プログラミングでは、<span class="jinr-d--text-color d--marker1 d--bold"><code>async</code></span> と <span class="jinr-d--text-color d--marker1 d--bold"><code>await</code></span> が重要な予約語となっており、これらのキーワードを使ってコルーチンを実現します。また、<span class="jinr-d--text-color d--marker1 d--bold"><code>asyncio</code></span> モジュールは、イベントループの標準実装など多くの非同期機能を提供しています。</p>



<p class="wp-block-paragraph">以降では、これらを用いた非同期プログラミングの基本を説明します。</p>



<h3 class="wp-block-heading jinr-heading d--bold">基本的な実装方法</h3>



<p class="wp-block-paragraph">Python における非同期プログラミングは、<code>async</code> や <code>await</code> を用いて以下のように実装します。また、複数の非同期タスクを同時に実行し、すべてのタスクが完了するのを待って結果を取得するには、<code>asyncio.gather</code> 関数を使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import asyncio
import time


async def worker(task_name):
    print(f"start: {task_name}")
    # 非同期に2秒間スリープ
    await asyncio.sleep(2)
    print(f"end: {task_name}")

    return task_name


async def main():
    # 非同期タスクを作成する
    tasks = [
        asyncio.create_task(worker("task1")),
        asyncio.create_task(worker("task2")),
        asyncio.create_task(worker("task3")),
    ]
    # 非同期に実行完了を待ち、結果をリストで取得
    results = await asyncio.gather(*tasks)
    # 結果表示
    print("===== 結果")
    for result in results:
        print(result)


if __name__ == "__main__":
    t = time.time()
    # asyncio.runを使用してメインコルーチンを実行
    asyncio.run(main())
    # 実行時間を表示
    print(f"実行時間: {time.time()-t:.5f} sec")</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
start: task1
start: task2
start: task3
end: task1
end: task2
end: task3
===== 結果
task1
task2
task3
実行時間: 2.01051 sec</pre>



<p class="wp-block-paragraph"><strong>【モジュールのインポート】</strong></p>



<p class="wp-block-paragraph">非同期プログラミングのために <code>asyncio</code> モジュールをインポートします。<code>asyncio</code> はタスク生成やイベントループといった多くの非同期機能を提供します。また、時間計測のために <code>time</code> モジュールもインポートしておきます。</p>



<p class="wp-block-paragraph"><strong>【コルーチン（非同期関数）の定義】</strong></p>



<p class="wp-block-paragraph">例では、<code>worker</code> 関数が、コルーチン（非同期関数）となっています。コルーチンの定義では、通常の関数定義の <code>def</code> の前に <span class="jinr-d--text-color d--marker1 d--bold"><code>async</code></span> キーワードを付けて「<code>async def worker(task_name):</code>」のように定義します。</p>



<p class="wp-block-paragraph">この <code>worker</code> 関数では、途中で <code>asyncio.sleep(2)</code> により 2 秒間のスリープを入れています。このスリープは、ファイル入出力やネットワーク通信などの I/O 処理で制御が解放されるタイミングを表していると思ってください。</p>



<p class="wp-block-paragraph">また、<code>worker</code> 関数は結果としてタスク名を返却するようにしています。</p>



<p class="wp-block-paragraph">非同期処理の関数を実行する場合には、<span class="jinr-d--text-color d--marker1 d--bold"><code>await</code></span> キーワードを付けて「<code>await asyncio.sleep(2)</code>」のように実行します。<code>await</code> を付けると、その処理の完了を待っている間に、イベントループは他のタスクへ処理を切り替えることができます。</p>



<p class="wp-block-paragraph"><strong>【タスクの生成】</strong></p>



<p class="wp-block-paragraph"><code>main</code> 関数もコルーチンで定義し、<code>main</code> 関数の中で非同期タスクを生成します。非同期タスク生成は、<code>asyncio.create_task</code> を使用します。<code>asyncio.create_task</code> の引数に実行するコルーチン自体を渡すことでタスクを生成できます。</p>



<p class="wp-block-paragraph">タスクを非同期に実行するには「<code>results = await asyncio.gather(*tasks)</code>」のように <code>asyncio.gather</code> 関数を使用します。<code>await</code> キーワードをつけることを忘れないようにしましょう。</p>



<p class="wp-block-paragraph"><code>asyncio.gather</code> は、複数のタスクやコルーチンを位置引数として受け取り、それらを並行して実行し、すべて完了した後に結果をまとめて返します。リストにまとめたタスクを渡す場合には、「<code>*tasks</code>」のようにアンパックして渡します。なお、<code>asyncio.gather</code> はタスクだけではなくコルーチンを直接渡すことも可能です。</p>



<p class="wp-block-paragraph"><strong>【イベントループの実行】</strong></p>



<p class="wp-block-paragraph">イベントループは、<code>asyncio.run</code> を使用します。<code>asyncio.run</code> で <code>main</code> コルーチンを実行することで、<code>main</code> 内で定義した複数タスクは、非同期に実行されます。</p>



<p class="wp-block-paragraph">各 <code>worker</code> 関数は 2 秒の待機時間があるため、同期処理として実行した場合には通常は約 6 秒の時間がかかるはずですが、実行結果を見ると、非同期で実行されることにより約 2 秒で処理が完了していることが分かります。</p>



<p class="wp-block-paragraph">非同期プログラミングは、I/O 操作（ファイルの読み書き、ネットワーク通信等）が多いプログラムで特に有効です。非同期プログラミングを適切に利用することで、プログラムのパフォーマンスと利用者の利便性向上に役立ちます。</p>



<h3 class="wp-block-heading jinr-heading d--bold">非同期プログラミングにおける注意事項</h3>



<h4 class="wp-block-heading jinr-heading d--bold">同期処理の呼び出しには注意が必要</h4>



<p class="wp-block-paragraph"><code>async</code> や <code>await</code> を使った基本的な非同期プログラミングの例を見てきました。非同期プログラミングを実現する際には、同期処理の関数やメソッドの使用に注意が必要です。同期処理の関数やメソッドが非同期なプログラムのコード内で使用されるとイベントループがブロックされ、非同期の利点が失われてしまいます。</p>



<p class="wp-block-paragraph">例えば、上記で紹介したサンプルコードにおいてスリープを <code>time.sleep(2)</code> に変えてみると、結果は以下のようになります。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">async def worker(task_name):
    print(f"start: {task_name}")
    # 2秒間スリープ (ブロック)
    time.sleep(2)
    print(f"end: {task_name}")

    return task_name</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
start: task1
end: task1
start: task2
end: task2
start: task3
end: task3
===== 結果
task1
task2
task3
実行時間: 6.00461 sec</pre>



<p class="wp-block-paragraph">上記結果を見てみると各タスクが同期的に実行され、結果 6 秒となります。これは、<code>time.sleep</code> が非同期を考慮していないためです。一方で、<code>asyncio.sleep</code> は、非同期に対応したものであったため、適切に非同期処理ができます。</p>



<p class="wp-block-paragraph">非同期処理を実現する際に、外部ライブラリなどを利用することもよくあります。その場合には、非同期に対応したライブラリかをよく確認する必要があります。</p>



<h4 class="wp-block-heading jinr-heading d--bold">非同期処理の限界</h4>



<p class="wp-block-paragraph"><code>asyncio</code> を用いた非同期処理は、I/O バウンドな処理には非常に有効ですが、CPU バウンドな処理ではパフォーマンスの向上は期待できません。CPU バウンドな処理では、<code>multiprocessing</code> や <code>concurrent.futures</code> の使用を検討してください。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">I/O バウンド／CPU バウンドの概要については以下を参考にしてください。</p>



<p class="wp-block-paragraph"><a href="https://tech.nkhn37.net/pythoni-parallel-process-io-cpu-bound/" target="_blank" rel="noreferrer noopener">並行・並列処理、I/Oバウンド・CPUバウンドを理解する</a></p>
</div>
		</div></section>



<h4 class="wp-block-heading jinr-heading d--bold">非同期処理の難易度</h4>



<p class="wp-block-paragraph">非同期プログラミング自体が、比較的難しいプログラミングであるため、十分に挙動を理解して使用しないと思いもよらない不具合を起こす場合があります。また、十分に経験を積んだ後でも、予期せぬ動作となることも起こり得ます。非同期プログラミングを採用する場合には、十分に必要性を検討するようにしましょう。</p>



<h3 class="wp-block-heading jinr-heading d--bold">実践的な非同期プログラミング例</h3>



<p class="wp-block-paragraph">実践的な非同期プログラミング例についてもいくつか紹介します。</p>



<h4 class="wp-block-heading jinr-heading d--bold"><code>aiohttp</code> を用いた非同期 HTTP 通信</h4>



<p class="wp-block-paragraph">HTTP 通信は非同期通信による処理が効果的な処理です。<code>aiohttp</code> は、クライアントとサーバーの両方のユースケースで非同期 HTTP 通信をサポートしているサードパーティ製ライブラリとして使用できます。</p>



<p class="wp-block-paragraph"><code>aiohttp</code> を用いた非同期通信の基本については「<a href="https://tech.nkhn37.net/python-aiohttp-async-http/" target="_blank" rel="noreferrer noopener">aiohttpを用いた非同期HTTP通信の基本</a>」を参考にしてください。このページでは、OpenWeather の API を使って非同期に API を呼び出す例を扱っています。</p>



<h4 class="wp-block-heading jinr-heading d--bold"><code>asyncpg</code> を用いた非同期データベース処理 (PostgreSQL)</h4>



<p class="wp-block-paragraph">データベース処理は非同期処理の効果が見込める処理の 1 つです。<code>asyncpg</code> は、PostgreSQL データベースの非同期処理をサポートする Python のサードパーティ製ライブラリとして使用できます。</p>



<p class="wp-block-paragraph"><code>asyncpg</code> を用いた非同期処理の基本については「<a href="https://tech.nkhn37.net/python-asyncpg-postgresql-basic/" target="_blank" rel="noreferrer noopener">asyncpgを用いた非同期データベース処理 (PostgreSQL)</a>」を参考にしてください。このページでは、PostgreSQL へ非同期にアクセスするクラスを作成しています。当該クラスは接続プールやコンテキストマネージャーに対応しています。</p>



<h4 class="wp-block-heading jinr-heading d--bold"><code>aiofiles</code> を用いた非同期ファイル入出力</h4>



<p class="wp-block-paragraph"><code>aiofiles</code> は、ファイル入出力を非同期に実行することができるサードパーティ製ライブラリです。<code>aiofiles</code> は、標準モジュールの <code>read</code> や <code>write</code> 等の非同期版を提供するため、基本的な入出力を理解できている方には使いやすいと思います。</p>



<p class="wp-block-paragraph"><code>aiofiles</code> を用いた非同期処理の基本については「<a href="https://tech.nkhn37.net/python-aiofiles-async-basic/" target="_blank" rel="noreferrer noopener">aiofilesを用いた非同期ファイル入出力</a>」を参考にしてください。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">Python で、<span class="jinr-d--text-color d--marker1 d--bold"><code>async</code> や <code>await</code> を用いた非同期プログラミングを実装する基本</span>について解説しました。</p>



<p class="wp-block-paragraph">同期・非同期処理、マルチスレッド・マルチプロセスといった処理方式の違いについてや、コルーチン、協調的マルチタスクといった考え方について冒頭で説明し、簡単な例で、<code>async</code> や <code>await</code> を用いた Python での非同期プログラミングを紹介しています。</p>



<p class="wp-block-paragraph">非同期処理は、I/O 操作（ファイルの読み書き、ネットワーク通信等）が多いプログラムで特に有効で、適切に利用することでプログラムのパフォーマンスや利用者の利便性向上に大いに役立ちます。</p>



<p class="wp-block-paragraph">ただし、非同期プログラミングは比較的難しい技術領域で、安易に採用すると予期せぬ挙動、不具合の原因になることがあります。解決したい課題に対して本当に必要かを見極めた上で、採用を判断することが大切です。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/asyncio" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-asyncio-async-await/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-06-19 16:54:32 by W3 Total Cache
-->