この記事では、Pythonで`os.fork()`を用いて子プロセスを作成し、管理する方法を詳しく解説します。コードの詳細解説、および応用例を2つ含めています。この知識を利用することで、より高度なマルチプロセスプログラミングが可能となります。
目次
os.fork()とは?
`os.fork()`はUnix系OSにおいて、Pythonプログラム内で新しいプロセスを作成する関数です。この関数を呼び出すと、呼び出し元のプロセス(親プロセス)から新しいプロセス(子プロセス)が生成されます。
基本的な使用法
基本的な使用法は非常にシンプルです。以下に簡単な例を示します。
import os
pid = os.fork()
if pid == 0:
# 子プロセスの処理
print("子プロセスです。")
else:
# 親プロセスの処理
print("親プロセスです。")
このコードは、`os.fork()`を呼び出して子プロセスを生成しています。子プロセスでは`pid`が0になり、親プロセスでは`pid`には子プロセスのプロセスIDが格納されます。
子プロセスの管理
子プロセスが生成された後、その管理は非常に重要です。リソースのリークを防ぐため、正確な管理が求められます。
プロセスの状態確認
子プロセスの状態を確認する方法として、`os.wait()`があります。この関数は、子プロセスが終了するまで親プロセスをブロックします。
import os
pid = os.fork()
if pid == 0:
# 子プロセスの処理
print("子プロセスです。")
else:
# 親プロセスの処理
os.wait()
print("子プロセスが終了しました。")
応用例1:子プロセスでの計算
子プロセスを利用して、計算タスクを並列に実行する例です。
import os
import time
def heavy_task(n):
time.sleep(n)
print(f"タスク{n}完了")
pid = os.fork()
if pid == 0:
# 子プロセスで重いタスク
heavy_task(5)
else:
# 親プロセスで別のタスク
heavy_task(2)
応用例2:子プロセスの終了管理
子プロセスが任意のタイミングで終了する場合の管理方法を考えます。
import os
import signal
pid = os.fork()
if pid == 0:
# 子プロセスの処理
while True:
pass
else:
# 親プロセスの処理
os.kill(pid, signal.SIGKILL)
print("子プロセスを終了しました")
この例では、`os.kill()`と`signal.SIGKILL`を用いて子プロセスを強制終了しています。
まとめ
Pythonで`os.fork()`を用いて子プロセスを作成・管理する方法を詳しく解説しました。この知識を活かして、マルチプロセスプログラミングの幅を広げてみてください。
コメント