KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

multiprocessの基本サンプル

登録日 :2023/09/21 05:19
カテゴリ :Python基礎

pythonにてマルチプロセスを使うサンプルコード

  • Threadは、I/Oバウンドに強いが、CPUバウンドには弱い
  • multiprocessはI/Oバウンドにも、CPUバウンドにも強い
multiprocessは以外と早くないかも

しかし、multiprocessは、物理的にマシンに搭載されているCPU数の数までしかスケール(並列化)できないという点がある。
os.cpu_count()という関数を使うと、自分が実行するマシンのCPU数を確認することができる。

ただ、Thread、Multiprocess, そして通常のSync(同期)の実行時間をテストで比較したときに、単純にマルチプロセスが一番速いとはならなかった。場合によっては、マルチプロセスのインスタンス?を立ち上げるのに時間がかかるのか、他のアプリケーションで消費されているからなのか、マルチプロセスが一番遅いこともあるようである。(私のノートパソコンで比較したら、I/Oバウンド、CPUバウンド、いずれもThreadが一番早かった。)

multiprocessのサンプルコード
# from multiprocessing import (
#     Process,
#     Lock, RLock, Semaphore, Queue, Event, Condition, Barrier,
#     Value, Array, Pipe, Manager)


import logging
import multiprocessing
import time

logging.basicConfig(level=logging.DEBUG,
                    format='%(processName)s: %(message)s')


def worker1(i):
    logging.debug('start')
    logging.debug(i)
    time.sleep(1)
    logging.debug('end')


def worker2(i):
    logging.debug('start')
    logging.debug(i)
    time.sleep(1)
    logging.debug('end')


if __name__ == '__main__':
    # multiprocess
    i = 10
    t1 = multiprocessing.Process(target=worker1, args=(i, ))
    t2 = multiprocessing.Process(
        name='renamed worker2', target=worker2, args=(i, ))
    t1.start()
    t2.start()