我有一些带有多处理和地图功能的误解。
我会尝试简要描述:
首先,我有一个列表,例如:
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,2,3,4,5 - 一个一个一个)。<<<<<<<<<<
将 (some logic with row)
放在函数中:
def row_logic(row):
return result
将功能传递给Pool.map
:
pool = Pool(10)
pool.map(row_logic, INPUT_MAGIC_DATA_STRUCTURE)
我们在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()