如何将列表的迭代索引传递给多处理池调用的函数?

How to pass an iteration index of list into a function called by multiprocessing pool?

我正在处理一个文件,拆分成多个数据帧,然后将它们放入一个池中。对于每个子数据框,我需要创建一个以迭代索引作为文件后缀的输出文件,如下所示:

import numpy as np

df = pd.read_csv(input_file, encoding='utf8')
dfs = np.split(df, [chunk_size])
            
process_pool = Pool(multiprocessing.cpu_count())
process_pool.starmap(process_df, zip(dfs, repeat(data_file), repeat(data_path)))

def process_df(df, data_file, data_path):

   ...

   output_file_name = data_path  + modified_data_file + str(idx) + '.csv'

在上面的代码中,'idx' 在未使用多处理时显示在此处:

for idx, df in dfs:
   ...
   output_file_name = data_path  + modified_data_file + str(idx) + '.csv'

在这种情况下,有没有办法在使用多处理时访问每个文件的迭代索引? file/dataframe 的迭代索引似乎是不可见的。

您可以将 zip 更改为:

zip(dfs, repeat(...), repeat(...), itertools.count())

您的 process_df 现在会有第四个索引参数,您可以随意使用它。

=====

已编辑。将 count() 误输入为 counter()。