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()