Python在池映射中使用列表/多个参数

时间:2017-11-21 23:17:01

标签: python python-multiprocessing python-pool

我正在尝试将列表作为参数传递给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() 。如何将列表作为参数传递给我的函数?

1 个答案:

答案 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;