multiprocessingモジュールによる簡単分散処理 [Python]
Pythonの2.6以降から利用できるマルチプロセスモジュールを使ったサンプルを作ってみた。
参考にしたのはこちら。
なんだか、簡単で拍子抜け。
現在会社で作ってるCOBOLソースの解析ツールの実行がシーケンシャル処理なので、これを使って複数のファイルを分散で解析させて、処理を早くさせようという魂胆。
これも見越して、COBOL解析処理もPythonで書きつつ、20日にCore i7のマシンが届くので、同時に8プロセス立てて実行できるかも。
いい時代になったもんですね~
以下、子プロセスを3つ立てて、それぞれにQueueを使ってメッセージをPUTするサンプル。
参考にしたのはこちら。
なんだか、簡単で拍子抜け。
現在会社で作ってるCOBOLソースの解析ツールの実行がシーケンシャル処理なので、これを使って複数のファイルを分散で解析させて、処理を早くさせようという魂胆。
これも見越して、COBOL解析処理もPythonで書きつつ、20日にCore i7のマシンが届くので、同時に8プロセス立てて実行できるかも。
いい時代になったもんですね~
以下、子プロセスを3つ立てて、それぞれにQueueを使ってメッセージをPUTするサンプル。
# -*- coding:utf-8 -*- import os import os.path import time from multiprocessing import Pool,Process,Queue # 子プロセスとして実行される処理 def Child(q,sThreadName): while True: # キューからメッセージを取得 msg = q.get() # 画面に出力 print ("%s:%s" % (sThreadName,str(msg[0]))) # メッセージが"quit"ならプロセス終了 if msg[0] == "quit" : break # デバッグ用スリープ time.sleep(1) if __name__ == "__main__": # 子プロセスとキューを管理する配列 procs = [] # 子プロセスとキューを作成し、管理配列に追加する for i in range(3) : n = "Process_%02d" % i q = Queue() p = Process(target=Child,args=(q,n)) p.start() procs.append( (p,q,n) ); # 子プロセス(3つ)に対してメッセージをPUTする for pinfo in procs : q = pinfo[1] for x in range(10) : q.put([x,]) # 最後に終了メッセージをPUT q.put(["quit",]) # 子プロセスが終了するまで待機する print("waiting") for pinfo in procs : p = pinfo[0] p.join()
2009-05-17 16:59
コメント(0)
コメント 0