parallel python で分散処理を実行



分散処理を行いたいプログラムを作る必要に迫られたので、
parallel python を使ってみました。

インストールは、
http://www.parallelpython.com/content/view/18/32/

ここから、

linux系の場合は
pp-1.5.3.tar.gz

をダウンロードし、
tar zxvf pp-1.5.3.tar.gz
cd pp-1.5.3
python setup.py install



Windowsの場合は
pp-1.5.3.exe

をダウンロードし、インストーラの指示に従ってインストールすればOKです。


今回は、
ローカル:Windows
リモート:debian
で試してみました。

まず、リモートになるサーバで
python ppserver.py

を実行しておきます。


実行したプログラムのソースコードを解析し、サーバに送る

送られたソースコードに従い、リモートでプログラム実行

という形で実行されるらしく、リモート側に資産は必用ありません。


作成したサンプルプログラムはこんな感じ


#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import pp
import socket,time

#IPアドレスを取得するメソッド
#分散環境で使用するメソッドから呼ばれます
def get_ip():
        host = socket.gethostname()
        ip = socket.gethostbyname_ex(host)
        return ip[2][0]

#分散環境で使用するメソッド
def sample_function(n):
        
        result = "called sample_function " + str(n) + "\n"
        result += "ip address:" + get_ip()
        
        #一瞬で処理が終わってしまうと、local資産しか使ってくれないので、
        #ウェイトを入れます。
        time.sleep(1)
        
        return result

if __name__ == "__main__":
        
        #ppserver.pyを実行している端末のIPアドレスを指定
        ppservers = ("192.168.1.2",)
        
        job_server = pp.Server(ppservers=ppservers)
        
        jobs = []
        for i in range(10):
                #ジョブを実行し、結果を退避しています。
                #※job_server.submitに渡す値
                #func=分散して実行するメソッド名
                #args=funcで指定したメソッドの引数
                #depfuncs=funcで指定したメソッド内で呼び出されるメソッド
                #modules=importする必要があるものを指定
                jobs.append(job_server.submit(func=sample_function, args=(i,),depfuncs=(get_ip,), modules=("time","socket")))

        for job in jobs:
                print job()

        job_server.print_stats()





実行結果はこんな感じになります。

called sample_function 0
ip address:192.168.1.1
called sample_function 1
ip address:192.168.1.1
called sample_function 2
ip address:192.168.1.1
called sample_function 3
ip address:192.168.1.1
called sample_function 4
ip address:192.168.1.2
called sample_function 5
ip address:192.168.1.2
called sample_function 6
ip address:192.168.1.1
called sample_function 7
ip address:192.168.1.1
called sample_function 8
ip address:192.168.1.2
called sample_function 9
ip address:192.168.1.1
Job execution statistics:
job count | % of all jobs | job time sum | time per job | job server
3 | 30.00 | 3.0282 | 1.009395 | 192.168.1.2:60000
7 | 70.00 | 7.0920 | 1.013143 | local
Time elapsed since server creation 4.65599989891



【参考URL】
http://hiroshiykw.blogspot.com/2008/05/parallel-python.html


もどる