perlでクローラっぽいプログラムを書くのに欠かせないParallel::Preforkですが、pythonでもクローラを書きたいので、真似してモジュールを作ってみました。
Parallel::Preforkと同じ感覚でpreforkなマルチプロセス処理を書けるのですが、サンプル見た方が早いと思うので、以下を参照ください。
import signal
from python_prefork import PythonPrefork
pp = PythonPrefork(max_workers=10, trap_signals=[signal.SIGTERM])
while not pp.signal_received:
if pp.start(): continue
run() # 子プロセス内で行いたい事をここに書く
pp.finish() # 子プロセスの終了
pp.wait_all_children()
このようにwhile文の中に子プロセス内で処理したい事を書きます。whileの中の1行目が気持ち悪いのですが、個人的には許容範囲という事でGOしました。
先日書いたDaemonContextと組み合わせると、いい感じでクローラデーモンが作れるので、クローラとかダウンローダの類のプログラムをpythonで書くのに便利だと思います。
調子にのってpypiにも登録したので、インストールはeasy_installで一発です。なので使ってみて下さい。
$ easy_install python_prefork
ちなみにソースコードはこちらになりまして、突っ込み頂けたら泣いて喜びます。