TAKEO

TAKEO

Python multiprocessing入門

はじめに

pythonのmultiprocessingを使った並列処理を実装してみましょう。

単一プロセス

単一プロセスなので並列化していない状態です。実行すると処理に4秒程度かかると思います。

unit-process.py
Copied!!
from multiprocessing import Process
import time


def f():
    f1()
    f2()


def f1():
    print("f1 start")
    time.sleep(2)
    print("f1 end")


def f2():
    print("f2 start")
    time.sleep(2)
    print("f2 end")


def main():
    startTime = time.time()
    p1 = Process(
        target=f,
    )
    p1.start()
    p1.join()
    endTime = time.time()
    print(f"処理時間:{endTime-startTime}秒")


if __name__ == "__main__":
    main()

2プロセス

並列度2で並列化した状態です。実行すると処理に2秒程度かかると思います。関数f1、f2を並列に実行することができ、処理時間を半減できましたね。

two-process.py
Copied!!
from multiprocessing import Process
import time


def f1():
    print("f1 start")
    time.sleep(2)
    print("f1 end")


def f2():
    print("f2 start")
    time.sleep(2)
    print("f2 end")


def main():
    ps = [
        Process(
            target=f1,
        ),
        Process(
            target=f2,
        ),
    ]

    startTime = time.time()
    for p in ps:
        p.start()

    for p in ps:
        p.join()

    endTime = time.time()
    print(f"処理時間:{endTime-startTime}秒")


if __name__ == "__main__":
    main()

おわりに

並列処理をすることでプログラムの実行時間を短くすることができました。

  • ハードウェアのCPUコア数と並列度の限界がどの程度のものなのか

とかはまだまだ気になる所ですね。また別の場で検証してみたいと思います。

関連記事