おいも貴婦人ブログ

生物系博士課程満期退学をしたAIエンジニアのブログ。

Python3でmultiprocessingを使ってみる。

pythonの並列プログラミングを修得するために、今回はmultiprocessingを使いたい思います。コードは至って簡単。関数1で乱数生成し他のプロセスにデータ送り、そのデータを他のプロセスで生成された関数2が表示します。

17.2. multiprocessing — プロセスベースの並列処理 — Python 3.4.3 ドキュメント

#!/usr/bin/env python3
## producer_taskがランダムな数字を送り、consumer_taskがそれを受け取り表示する。
import os ,random
from multiprocessing import Process, Pipe
## Pipe :: 2つのプロセスで情報のやりとりをする。
## Process :: プロセスを生成する。データの非同期的に実行するならば、このオブジェクトだけを使えばいい。

def producer_task(conn):
    value = random.randint(1,10)
    conn.send(value)
    print('Value [%s] sent by PID [%d]' % (value, os.getpid()))
    ## os.getid()を出力することで、マルチプロセッシングが出来ていることを確認する。
    conn.close()

def consumer_task(conn):
    print('Value [%d] received by PID [%d]' % (conn.recv(), os.getpid()))

if __name__ == '__main__':
    producer_conn, consumer_conn = Pipe()
    consumer = Process(target=consumer_task,args=(consumer_conn,))
    producer = Process(target=producer_task,args=(producer_conn,))

    consumer.start()
    producer.start()

    consumer.join()
    producer.join()
    

出力

Value [9] sent by PID [14808]
Value [9] received by PID [14807]

参考文献

Parallel Programming With Python

Parallel Programming With Python