多处理:如何在列表上使用pool.map并使用参数函数?

时间:2017-03-12 16:13:30

标签: python multiprocessing

我对多处理和地图功能有一些误解。

我将简要介绍一下:

首先,我有一个列表,例如:

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'],
]

我也有方法,目前使用特定的内部逻辑解析此列表:

def parse(api_client1, api_client2):
     for row in INPUT_MAGIC_DATA_STRUCTURE: 
         parsed_repo_row = ... (some logic with row)
         OUTPUT_MAGIC_DATA_STRUCTURE.append(parsed_repo_row)

最后,我认为有一些变体可以使其异步而不是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 - 逐个)。 / p>

2 个答案:

答案 0 :(得分:4)

(some logic with row)放入函数中:

def row_logic(row):
    return result

将功能传递给Pool.map

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

答案 1 :(得分: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()