SSブログ

multiprocessingモジュールによる簡単分散処理 [Python]

Pythonの2.6以降から利用できるマルチプロセスモジュールを使ったサンプルを作ってみた。
参考にしたのはこちら

なんだか、簡単で拍子抜け。

現在会社で作ってる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()

コメント(0) 

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。