Python Using List/Multiple Arguments in Pool Map
我试图将一个列表作为参数传递给
原始代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from multiprocessing import Pool import pandas as pd import os account='xxx' password='xxx' threads=5 co_links='file.csv' input_list=[] pool = Pool(processes=threads) def co_refresh(url, account, password, outputfile): print(url + ' : ' + account + ' : ' + password + ' : ' + outputfile) return; link_pool = pd.read_csv(co_links, skipinitialspace = True) for i, row in link_pool.iterrows(): ln = (row.URL, account, password, os.path.join('e:/', row.File_Name.split('.')[0] + '.csv')) input_list.append(ln) pool.map(co_refresh, input_list) pool.close() |
但是,它从未触发函数
旧问题(简化):
我有下面的输入列表,它是
1 2 3 | [a1, b1, c1, d1] [a2, b2, c2, d2] [a3, b3, c3, d3] |
号
我的功能如下:
1 2 3 | def func(a, b, c, d) ### return; |
我想对这个函数使用多进程
1 2 3 4 | from multiprocessing import Pool pool = Pool(processes=5) pool.map(func, input_list) pool.close() |
。
但是,它从未触发函数
在声明
另外,您最好用
一个简单的例子:
1 2 3 4 5 6 7 8 9 10 11 | from multiprocessing import Pool def co_refresh(a, b, c, d): print(a, b, c, d) input_list = [f'a{i} b{i} c{i} d{i}'.split() for i in range(4)] # [['a0', 'b0', 'c0', 'd0'], ['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2'], ['a3', 'b3', 'c3', 'd3']] pool = Pool(processes=3) pool.starmap(co_refresh, input_list) pool.close() |
考虑下面的代码
1 2 3 4 5 6 7 8 9 | from multiprocessing.pool import Pool data = [["a1","b1","c1","d1"], ["a2","b2","c2","d2"], ["a3","b3","c3","d3"], ] def someaction(a, b=1, c=2, d=3): print(a, b, c, d) |
号
当您在脚本中使用池调用它时
1 2 | pool = Pool(4) pool.map(someaction, data) |
输出为
1 2 3 | ['a1', 'b1', 'c1', 'd1'] 1 2 3 ['a2', 'b2', 'c2', 'd2'] 1 2 3 ['a3', 'b3', 'c3', 'd3'] 1 2 3 |
。
因此,
1 2 | def someaction_wrapper(data): someaction(*data) |
然后在池中调用这个包装函数。现在你用
1 2 | pool = Pool(4) pool.map(someaction_wrapper, data) |
。
输出是
1 2 3 | a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3 |
。
我相信这就是你想要的
Georgexsh的答案在python 3中非常有效;关键是
但是,如果您使用python 2,您将需要在这里的问题下使用ahmed在注释中提到的pythonclassic解包。
在我的例子中,我只需要在函数中首先"登记"参数。
1 2 3 4 | def func(args) (a, b, c, d) = args # You can then use a, b, c, d in your function return; |