2017-10-19 11 views
0

と機能上だから私は2つだけの引数を取ることによって、いくつかの.txtファイルにいくつかのものを行う機能を持っています。現在は意図どおりに動作していますが、私は約1時間で私のものの10%のようなものを手に入れることができました。だから、.txtファイルはかなり大きいので時間がかかります。マルチプロセッシング(プール)の二つの引数

今、私は、パッケージ・マルチプロセッシング、およびこれの特にプールのセグメントについて読んでてきました。しかし、私はそれをどのように正しく使用するかについてはあまりよく分かりません。だから、

structures = [1, 3, 6, 7, 8, 10, 13, 25, 27] 

structuresが異なる値のリスト、例えばあるのに対し、structure_pathは常に同じである

for k, structure in enumerate(structures): 
    structure_maker(structure_path, structure) 

私は私の機能を実行するために使用するコードは以下のとおりです。私はこのことについてPoolプロセスをどのように使うのでしょうか? 限り、私は読むことができるように私のような何かをする必要があります:私は迷子にどこ

from multiprocessing import Pool 

mypool = Pool(6) # Choosing how many cores I want to use 
mypool.map(structure_maker, list) 

そしてlistです。それは何であるはずですか? structuresリスト、もしそうなら、私はどこに入れますかstructure_path

答えて

1

Pool.map()機能は同じように動作し、内蔵map()機能し、他の言葉では、第2引数として渡された反復可能な内の各項目への引数として渡された関数を適用。それは供給関数を呼び出すたびに、関数へ単一引数として反復可能で次の項目を提供します。

この場合、潜在的な問題は、機能を使用したいということですstructure_maker()、2つの引数が必要です。そここの周りにさまざまな方法がありますが、引数のいずれかが常に同じものであるので、この場合には、あなただけに渡される2番目の引数が必要です、それを-、あなたがそれを行うことができ、一時的な関数を作成するfunctools.partial()機能を使用することができますmypool.map()コールでここで

は私の意味は次のとおりです。

from multiprocessing import Pool 

def structure_maker(structure_path, structure): 
    """ Dummy for testing. """ 
    return structure_path, structure 

if __name__ == '__main__': 

    from pprint import pprint 
    from functools import partial 

    mypool = Pool(4) 
    structure_path = 'samething' 
    structures = [1, 3, 6, 7, 8, 10, 13, 25, 27] 
    results = mypool.map(partial(structure_maker, structure_path), structures) 
    pprint(results) 

出力:

[('samething', 1), 
('samething', 3), 
('samething', 6), 
('samething', 7), 
('samething', 8), 
('samething', 10), 
('samething', 13), 
('samething', 25), 
('samething', 27)] 
0

あなたはtupleを作成し、解凍する必要があるかもしれません。

def structure_maker_proxy(args): 
    structure_path, structure = args 
    structure_maker(structure_path, structure) 


from multiprocessing import Pool 

mypool = Pool(6) # Choosing how many cores I want to use 

lis = [(structure_path, struct) for struct in structures] 
mypool.map(structure_maker_proxy, lis) 
関連する問題