デーモンプロセス

multiprocessingモジュールを用いた、Pythonマルチプロセスプログラムングの実験。

(注意)
Pythonのデーモンプロセスは、Unixのデーモンではなく、通常プロセスの一種である。

子プロセスの生成から起動まで

import multiprocessing as mp # 「multiprocessing」だと長いので、mpに置き換える。
from time import sleep

# 子プロセスで動かす関数を用意する。
def hello(who, num):
    for i in range(num):
        print("{}: Hello, {}.".format(i, who))
        sleep(0.9) # 実験のため、スクリプトを一時停止。

# targetに子プロセスで動かす関数を指定し、
# argsにその関数に引き渡す変数をタプルで渡す。
p = mp.Process(target=hello, args=('Taro', 5))
p.daemon = True # デーモンプロセスで動かすか or 非デーモンプロセスで動かすか
p.start()       # 子プロセス開始

p.daemon = Trueのとき
親プロセスが終了すると子プロセスも終了する。

p.daemon = Falseのとき
親プロセスが終了しても子プロセスは動き続ける。

ここまでは決まり文句なので、指が覚えるまで何度も入力する。
練習あるのみ。

子プロセスの終了を待つ

p.join() # プロセスpが終了するまで待つ。
hogehoge # プロセスpの終了後、hogehogeが実行される。

あるいは、

p.join(2.5) # プロセスpを2.5秒待つ。
hogehoge # 2.5秒後、hogehogeが実行される。

以上をまとめると・・・

子プロセスを起動するサンプルプログラムは以下のようになる。


『入門Python 3』には、たったの1ページでさらりと掲載されているのだが、厳密に理解しようとすると、このような長い記事になってしまった。

こんなことで、一人前のPythonプログラマーになれる日は来るのだろうか?

参考サイト

multiprocessiong

参考文献

入門Python 3 (オライリー)

Pythonプログラミング物語 © 2016 Frontier Theme