1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】マルチスレッドとマルチプロセスの概要・違い

Last updated at Posted at 2023-12-03

PHPをこれまでメインに使っておりましたが、現在のプロジェクトではPythonを使用しております。
慣れないというかPHPではあまり馴染みのないマルチスレッドとマルチプロセスについて、その違いと役割について備忘としてまとめます。

基本的な理解をするためのものなので、詳しい実装方法などは説明しません。

基本的な説明

通常の処理

通常の処理であればコードは逐次実行されます。
同時に複数の処理が行われることはなく、上から順にコードが実行されていきます。

マルチプロセス (並列処理)

複数の作業者がおり、同時に二つの処理を実行するような処理方法を言います。
マルチプロセスはプロセスを二つ利用します。
プロセスとはコンピューター上で動かす処理単位を言います。PCで複数アプリケーションを使用している場合は、マルチプロセスを行っていると言えます。

multiprocess.png

マルチスレッド (並行処理)

一つの作業者ですが、他の処理の空き時間を利用して処理を実行するような処理方法のことを言います。
スレッドとはプロセスをさらに細分化したような単位です。

multithread.png

それぞれの得意

マルチプロセス(並列処理)

CPUバウンドが発生するような処理に使うのが良いです ⇒ 計算量が多くなってしまうもの

例)

  • 大量の計算処理
  • PDFを画像に変換する処理など

マルチスレッド(並行処理)

I/O(インプット/アウトプット)バウンドが発生するような処理に使うのが良いです

例)

  • APIの呼び出し
  • データベースへの挿入など

実装方法

どちらもconcurrent.futuresモジュールからインポートして実装することができます。
以下を見てもらえば分かりますが、記述自体はほとんど変わりません。

マルチプロセス(並列処理)

import concurrent.futures

def func1():
    # func1の処理
    print('func1')

def func2():
    # func2の処理
    print('func2')

# ProcessPoolExecutorを使用して並列処理を実行
with concurrent.futures.ProcessPoolExecutor() as executor:
    # 各関数を並列に実行
    executor.submit(func1)
    executor.submit(func2)

マルチスレッド(並行処理)

import concurrent.futures

def func1():
    # func1の処理
    print('func1')

def func2():
    # func2の処理
    print('func2')

# ThreadPoolExecutorを使用してマルチスレッド処理を実行
with concurrent.futures.ThreadPoolExecutor() as executor:
    # 各関数を並行処理で実行
    executor.submit(func1)
    executor.submit(func2)

今回は基礎的な実装しか書いていないのでもし詳しいことが知りたい場合は以下を参照してください

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?