如何将列表的迭代索引传递给多处理池调用的函数?
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()。
我正在处理一个文件,拆分成多个数据帧,然后将它们放入一个池中。对于每个子数据框,我需要创建一个以迭代索引作为文件后缀的输出文件,如下所示:
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()。