2012-04-03 10 views
2

私はParallel Pythonでかなり単純なことをしようとしています。クラスを使用して別のメソッドの中で作成したクラスからオブジェクトを作成して、並行してジョブを実行できるようにしたいと考えています。並列Python - 並列実行で別のクラスにオブジェクトを作成する

import pp 

class TestClass(object): 
    def __init__(self): 
     pass 
    def doSomething (self, number) : 
     print number**2 

class PPTask (object) : 
    def __init__ (self) : 
     pass 
    def ppTask(self, number = 1) : 
     sum = 0 
     sum += number 
     tc = TestClass() 
     tc.doSomething(sum) 
     return sum 

if __name__ == '__main__' : 
    job_server = pp.Server() 
    job_list = [] 
    results = [] 
    for i in xrange(10) : 
     pt = PPTask() 
     job_list.append(job_server.submit(pt.ppTask, (1,), globals = globals())) 
    for job in job_list : 
     results.append(job()) 
    for result in results : 
     print result 

このNameError: global name 'TestClass' is not definedを上げ、私はそれを渡すか、ppTask方法でそれを再利用する任意の解決策を見つけることができませんでした: は、ここで私はそれを動作させるしたいものの基本的な例です。

どのような助けも大幅に強化されます。

答えて

1

一つの解決策は、あなたが提出する各ジョブのソースモジュール自体をインポートするジョブサーバーを伝えることであろう事前にありがとうございます。たとえば、あなたのスクリプトがpptest.py呼ばれた上であれば、あなたはそのようなジョブを作成できます。

job_list.append(job_server.submit(pt.ppTask, (1,), modules=('pptest',))) 

そしてppTask以内に、あなたはそのようTestClassをインスタンス化できます。

tc = pptest.TestClass() 

ので全体的に、コードだろうこのように見えます:

import pp 

class TestClass(object): 
    def __init__(self): 
     pass 
    def doSomething (self, number) : 
     print number**2 

class PPTask (object) : 
    def __init__ (self) : 
     pass 
    def ppTask(self, number = 1) : 
     sum = 0 
     sum += number 
     tc = pptest.TestClass() 
     tc.doSomething(sum) 
     return sum 

if __name__ == '__main__' : 
    job_server = pp.Server() 
    job_list = [] 
    results = [] 
    for i in xrange(10) : 
     pt = PPTask() 
     job_list.append(job_server.submit(pt.ppTask, (1,), modules=('pptest',))) 
    for job in job_list : 
     results.append(job()) 
    for result in results : 
     print result 
+0

ありがとう、それはうまくいきます。 PPの提出方法によってグローバルがどのように処理されるのかまだ分かりません。私はglobals = {'TestClass':}を介して辞書を使ってTestClassを渡そうとしましたが、なぜこれがうまくいかないのか分かりません。 –

+0

ええ、私もそれを試みましたが、どちらかを働かせることができませんでした。 _should_のように思えるが、私は自信を持ってそれを言うために 'pp'について十分に知りません。なぜなら、私は通常別々のモジュールファイルに別々のクラスを入れて、 'Server.submit()'に 'modules'キーワード引数を使って、何をインポートするかをジョブに伝えるだけなので、これまで実行したことはありませんでした。 –

関連する問題