2017-03-12 13 views
1

私はマルチプロセッシングとマップ機能にいくつかの誤解があります。マルチプロセッシング:引数にリストと関数のpool.mapを使用するには?

私は簡単に説明しようとするでしょう:

まず、私は、例えば、リストを持っている:

INPUT_MAGIC_DATA_STRUCTURE = [ 
    ['https://github.com', 'Owner', 'Repo', '', '', '0', '0'], 
    ['https://github.com', 'Owner', 'Repo', '', '', '0', '0'], 
    ['https://github.com', 'Owner', 'Repo', '', '', '0', '0'], 
    ['https://github.com', 'Owner', 'Repo', '', '', '0', '0'], 
    ['https://github.com', 'Owner', 'Repo', '', '', '0', '0'], 
    ['https://github.com', 'Owner', 'Repo', '', '', '0', '0'], 
] 

また、私は現在、特定の内部ロジックを使用して、このリストを解析する方法を、持っています ​​

最後に、forではなく、非同期にするいくつかの変形があります。

from multiprocessing import Pool 
    pool = Pool(10) 
    pool.map(<???>, INPUT_MAGIC_STRUCTURE) 

??? - api_client1、api_client2 - 私はpool.map()への最初の引数としてfor row in INPUT_MAGIC_DATA_STRUCTUREから私のparse()を転送し、そのすべての引数を転送する方法を理解することはできません。

お手伝いできますか?

ありがとうございます。

UPD:

私はすでに作った:インタプリタが止まる二行目に来るとparse()メソッドのインスタンスを1つだけ作るとき

pool = Pool(10) 
pool.map(parse(magic_parser, magic_staff), INPUT_MAGIC_DATA_STRUCTURE) 

とにかく、(私が見ます解析された行の出力を記録する:1、2、3、4、5 - 1つずつ)。

+0

だから、あなたはそれを修正し、リスト上で実行されている多くのプロセスがあるでしょうか? –

+0

@ TimGivoisこれらのプロセスがリストにのみ追加されるとします。それは不可能? – vladiqtx

+0

'appends'はスレッドセーフなので、リストに追加するだけであれば、xプロセスを同時に実行しても問題なくリストを変更できます。http://stackoverflow.com/questions/ 5442910/python-multiprocessing-pool-map-for-multiple-arguments –

答えて

3

は、関数で(some logic with row)を入れて:

def row_logic(row): 
    return result 

Pool.mapに関数を渡します

pool = Pool(10) 
pool.map(row_logic, INPUT_MAGIC_DATA_STRUCTURE) 
0

我々は、Pythonでそれは簡単ではありませんよ。行を解析関数ごとにマップする必要があります。このリンクを見てください:https://gist.github.com/baojie/6047780

from multiprocessing import Process 
def parse_row(row): 
    (some logic with row) 

def dispatch_job(rows, parse_row): 
    for row in rows: 
     p = Process(target=parse_row, args=(row,)) 
     p.start() 
関連する問題