我正在尝试将列表作为参数传递给pool.map(co_refresh, input_list)
。但是,pool.map
没有触发函数co_refresh
。并且没有错误返回。看起来这个过程就在那里。
原始代码:
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()
但是,它从未触发函数co_refresh
。如何将列表作为参数传递给我的函数?
旧问题(简体):
我的input_list下面是list
的{{1}}:
list
我的功能如下:
[a1, b1, c1, d1]
[a2, b2, c2, d2]
[a3, b3, c3, d3]
我想对此函数使用多进程def func(a, b, c, d)
###
return;
:
func
但是,它从未触发函数from multiprocessing import Pool
pool = Pool(processes=5)
pool.map(func, input_list)
pool.close()
。如何将列表作为参数传递给我的函数?
答案 0 :(得分:0)
georgexsh的答案在Python 3中完美运行;关键是starmap
允许将多个参数传递给函数。
但是,如果您使用Python 2,则需要使用Ahmed在问题here下的评论中提到的python经典解包。
就我而言,我只需要先在函数中“登记”参数。
def func(args)
(a, b, c, d) = args
# You can then use a, b, c, d in your function
return;