2016-09-26 6 views
0

私は、MySQLテーブルから属性のディクテーションを取得し、次にパラレルでメインスクリプトのインスタンスを検索し、取得した各dictを使用してマルチプロセッシングスクリプトを作成しようとしています。メインスクリプトの各インスタンスへの引数としてMySQLテーブルから取得します。メインスクリプトにはqueen_bee()というメソッドがあり、これは他のすべてのメソッドが正しい情報を持ち、適切な順序で実行されるようにします。python 27 - 並列に別のスクリプトのインスタンスを作成して実行する

私は、マルチスクリプトライブラリを使ってメインスクリプトの並列プロセスを作成/実行するために、dictsのリストを反復しようとしました。しかし、同時に実行されることはありません。

from my_main_script import my_main_class as main 
import multiprocessing as mp 

def create_list_of_attribute_dicts(): 
    ... 
    return list_of_dicts 

for each_dict in list_of_dicts: 
    instance = main(each_dict) 
    p = mp.Process(target=instance.queen_bee(),args=(each_dict,)) 
    p.start() 
    ... 

また、マルチプロセッシングライブラリのPool.map()メソッドを使用してみました。

... 
pool = mp.Pool() 
jobs = pool.map(main.queen_bee(),list_of_dicts) 

Pool.map方法は、これらのインスタンスを取得するためのクリーン、最も神託の方法のようだ:しかし、私はPool.mapを使用して、各辞書()用のメインスクリプト1時間をインスタンス化する方法を見つけ出すことはできません並行して実行することができますが、私はこの場合適切な方法でそれをやります。 'main'がインスタンス化されていないため、上記の 'jobs'変数が失敗することはわかっています。しかし、私はどのように各dictを主クラスの別々のインスタンスへの引数として渡し、mapメソッドを使ってそれらのインスタンスを実行するかを理解することはできません。私は別のアプローチをしようとしています。あなたの助けを前にありがとう。

答えて

0

私はそれを舐めると思います。答えは、内ののワーカー関数を呼び出すために、プールのマップ関数を使用しているように見えます。同じマルチプロセッシングスクリプト。次に、ワーカー関数は、独自のワーカー関数を呼び出すメインスクリプト(この場合は 'queen_bee')をインスタンス化します。上から私のコードの例を使用

from my_main_script import my_main_class as main 
import multiprocessing as mp 

def create_list_of_active_job_attribute_dicts(): 
    ... 
    return active_jobs 

def call_the_queen(individual_active_job): 
    instance = main(individual_active_job) 
    instance.queen_bee() 

if __name__ == '__main__': 
    pool = mp.Pool(processes = 4) 
    pool.map(call_the_queen,active_jobs) 
    pool.close() 
    pool.join() 

私はこのアプローチは働いていた、もう一方はしなかった理由は考えを持っていません。誰かが体重を測って説明したいと思うなら、私は感謝するでしょう。あなたの助けに感謝@コーダー!