自作multiprocessingプログラムサンプル
別に2.6じゃなくても簡単に書こうと思えば書けるよねえ。
でmultiprocessingモジュールの中身はどうなってるのかって話があまり書かれてない感じだったので書いてみた。
概略的なコードは以下。
import os import sys import time class Process(object): def __init__(self, target=None, args=()): self._target = target self._args = args def _run(self): self._target(*self._args) def _bootstrap(self): self._run() return 0 def start(self): self.popen = Popen(self) class Popen(object): def __init__(self, process): sys.stdout.flush() sys.stderr.flush() self.pid = os.fork() if self.pid == 0: code = process._bootstrap() sys.stdout.flush() sys.stderr.flush() os._exit(code) def test(): print("test") p = Process(target=test) p.start() time.sleep(10)
終了系とか、current_processを上書きするとか細かいところは省略。
(まあそこ肝なのかも知れないけど)
閉じ込め方の基本概念はこんな感じ。
pid=0の子プロセス時だけprocessクラスを走らせるというだけなのでそんなむずくない。
もっと下の突っ込んだ話はliris先生が書いてくれるはずです。