2017-03-12 32 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) 

??? - 我不明白怎麼我的parse()for row in INPUT_MAGIC_DATA_STRUCTURE作爲第一個參數傳遞給pool.map()和轉讓其所有參數 - api_client1,api_client2。

你能幫我嗎?

在此先感謝。

UPD:

我已經做了:

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

無論如何,當解釋涉及到它停止第二線,使只有一個parse()方法的一個實例(我見記錄分析行的輸出:1,2,3,4,5 - 逐個記錄)。

+0

所以,你會有很多進程在列表上運行,修改它? –

+0

@TimGivois假設這些進程只會追加到列表中。這不可能? – vladiqtx

+0

如果您只追加到列表中,因爲'append'是線程安全的,這意味着您可以讓x個進程併發地運行,同時修改列表而不會產生任何問題:http://stackoverflow.com/questions/ 5442910/Python的多處理池地圖換多參數 –

回答

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

我們將在蟒蛇它不是那麼容易的。您需要將行映射到您的每行解析函數。看看這個鏈接: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() 
相關問題