なんだかGoodVibes

日々の勉強メモです。

【Python】multiprocessingを使ってプロセス作成

こんにちは。
本日はPythonメモです。

概要

multiprocessingモジュールは標準ライブラリに含まれます。
multiprocessingモジュールを使用することで
特定の処理を別プロセスで実行することができます。

プロセスの作成はProcess()
プロセスの開始はstart()
プロセスの終了待機はjoin()で行います。


引数なしの関数を実行

import multiprocessing
import os

def func():
    print(f'[func] parent process id: {os.getppid()}')
    print(f'[func] process id: {os.getpid()}')

if __name__ == '__main__':
    print(f'process id: {os.getpid()}')

    p = multiprocessing.Process(target=func)
    p.start()
    p.join()

実行結果は以下です。

process id: 42522
[func] parent process id: 42522
[func] process id: 42524


引数ありの関数を実行

import multiprocessing
import os

def func(msg):
    print(msg)
    print(f'[func] parent process id: {os.getppid()}')
    print(f'[func] process id: {os.getpid()}')

if __name__ == '__main__':
    print(f'process id: {os.getpid()}')

    p = multiprocessing.Process(target=func, args=('Hello!',))
    p.start()
    p.join()

実行結果は以下です。

process id: 42602
Hello!
[func] parent process id: 42602
[func] process id: 42605


辞書型の引数の関数を実行

import multiprocessing
import os

def func(**dic):
    print(f'{dic['id']}:{dic['name']}')
    print(f'[func] parent process id: {os.getppid()}')
    print(f'[func] process id: {os.getpid()}')

if __name__ == '__main__':
    print(f'process id: {os.getpid()}')

    p = multiprocessing.Process(target=func, kwargs={'id':'001', 'name':'Bob'})
    p.start()
    p.join()

実行結果は以下です。

process id: 42818
001:Bob
[func] parent process id: 42818
[func] process id: 42822



以上です。