カテゴリ: Python 更新日: 2026/08/20

Pythonの並列処理とは?マルチスレッドとマルチプロセスの違い

Pythonの並列処理とは?マルチスレッドとマルチプロセスの違い
Pythonの並列処理とは?マルチスレッドとマルチプロセスの違い

先生と生徒の会話形式で理解しよう

生徒

「並列処理とは?マルチスレッドとマルチプロセスの違いを学びたいのですが、サンプルコードをどう読めばいいですか?」

先生

「まずは I/O待ちが多い処理を複数スレッドで進める作業 という目的で考えると分かりやすいです。何を入力して、Pythonでどう処理し、何を結果として確認するかを分けて見ましょう。」

生徒

「SEO記事っぽい説明だけでなく、実際に動かすコードも見たいです。」

先生

「では、asyncioを中心に、実務でつまずきやすいエラー処理やログ出力も含めて確認していきましょう。」

1. 並列化する処理と順番に動かす処理を分ける

1. 並列化する処理と順番に動かす処理を分ける
1. 並列化する処理と順番に動かす処理を分ける

並列処理とは?マルチスレッドとマルチプロセスの違いは、ただライブラリ名を覚えるだけでは実務で使いにくいテーマです。まずは I/O待ちが多い処理を複数スレッドで進める作業 という具体例に置き換えて、入力、処理、出力、エラー時の動きを確認します。


from multiprocessing import Pool

def calc_square(value: int) -> int:
    return value * value

if __name__ == "__main__":
    with Pool(processes=4) as pool:
        results = pool.map(calc_square, range(10))
    print(results)

2. asyncioの基本構造を小さなコードで確認する

2. asyncioの基本構造を小さなコードで確認する
2. asyncioの基本構造を小さなコードで確認する

asyncioを使う前に、インストール方法、実行環境、扱うデータの範囲を整理しておきます。特にネットワーク、メール、IoT、セキュリティ系は、自分が管理する環境で試すことが大切です。


from time import perf_counter, sleep

start = perf_counter()
sleep(0.2)
elapsed = perf_counter() - start

print(f"{elapsed:.3f} seconds")

3. I/O待ちとCPU負荷で選ぶ並列処理の違い

3. I/O待ちとCPU負荷で選ぶ並列処理の違い
3. I/O待ちとCPU負荷で選ぶ並列処理の違い

Pythonコードでは、正常に動くケースだけでなく、タイムアウト、ファイルなし、認証失敗、入力ミスなども想定します。例外処理を入れておくと、学習用コードでも原因を追いやすくなります。


from concurrent.futures import ThreadPoolExecutor, as_completed

def task(value: int) -> int:
    return value * 2

with ThreadPoolExecutor(max_workers=3) as executor:
    futures = [executor.submit(task, i) for i in range(5)]
    for future in as_completed(futures):
        print(future.result())

4. 共有データ・ロック・キューで競合を防ぐ

4. 共有データ・ロック・キューで競合を防ぐ
4. 共有データ・ロック・キューで競合を防ぐ

処理結果は、画面に表示するだけでなく、ログやファイルに残すと確認しやすくなります。あとから失敗原因を追えるように、日時、対象、結果を記録する習慣をつけましょう。


import logging

logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
logger = logging.getLogger(__name__)

logger.info("処理を開始しました")

5. 例外・キャンセル・タイムアウトを安全に扱う

5. 例外・キャンセル・タイムアウトを安全に扱う
5. 例外・キャンセル・タイムアウトを安全に扱う

同じ処理を何度も書く場合は、関数や小さなクラスへ分けます。関数名に目的を入れると、あとで見返したときに「何をするコードか」がすぐ分かります。


from pathlib import Path

output = Path("result.txt")
output.write_text("処理結果を保存しました\n", encoding="utf-8")

print(output.read_text(encoding="utf-8"))

6. 処理時間を測って効果を確認する方法

6. 処理時間を測って効果を確認する方法
6. 処理時間を測って効果を確認する方法

最後に、I/O待ちが多い処理を複数スレッドで進める作業 として動く形へまとめます。コードを写すだけでなく、対象データや引数を変えて試すと、検索されるだけでなく読者の学習にも役立つ記事になります。


def validate_required(value: str, label: str) -> list[str]:
    errors = []
    if not value.strip():
        errors.append(f"{label}は必須です")
    return errors

print(validate_required("Python", "キーワード"))

7. 並列処理として動かす完成コード

7. 並列処理として動かす完成コード
7. 並列処理として動かす完成コード

I/O待ちが多い処理を複数スレッドで進める作業として使うなら、サンプルコードを1回動かして終わりにせず、対象データ、ファイル名、URL、認証情報、実行環境を変えて確認しましょう。asyncioの役割が見えると、応用もしやすくなります。

実務では、正常系よりも失敗時の扱いで差が出ます。ログ、例外、タイムアウト、入力チェックを入れておくことで、読者がそのまま練習しやすいコードになります。

8. 本番処理へ入れる前のデバッグポイント

8. 本番処理へ入れる前のデバッグポイント
8. 本番処理へ入れる前のデバッグポイント

並列処理とは?マルチスレッドとマルチプロセスの違いを身につけるには、まず小さなコードで動きを確認し、次にログ出力、設定ファイル、テスト、自動実行へ広げるのがおすすめです。記事を読んだ人が自分の環境で試せるように、値を変えやすい形で残しておきましょう。

次の練習では、この記事のコードに設定ファイル読み込み、CSV保存、pytestでの確認、GitHub Actionsでの自動実行のどれか1つを追加してみてください。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

Python の並列処理とマルチスレッドの記事一覧へ
新着記事
New1
Claude
ClaudeにPHPデバッグを相談するコツ!原因候補を仮説に分けて確認する質問例
New2
Python
PythonのCLIで対話型メニューを作る方法(prompt_toolkit)
New3
ChatGPT
ChatGPTでPHPコードを理解する方法!読めない処理をわかりやすく質問しよう
New4
PHP
PHP の定数(define, const)を使った設定方法を徹底解説!
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.3
Java&Spring記事人気No3
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.4
Java&Spring記事人気No4
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.5
Java&Spring記事人気No5
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作
No.6
Java&Spring記事人気No6
Claude
ClaudeにPHPリファクタリングを相談するコツ!目的・前提・制約を仕様メモにまとめるコツ
No.7
Java&Spring記事人気No7
Python
Pythonのシェルスクリプトを自動実行する方法(cron & Task Scheduler)
No.8
Java&Spring記事人気No8
PHP
PHPのMVCパターンを完全解説!初心者でもわかるModel・View・Controller