【发布时间】:2022-11-22 04:34:53
【问题描述】:
我有一个调用自定义函数的函数,该函数比较数据框中的行并计算一些统计数据。 vt.make_breakpts 它需要一个数据框(数据)、一个键(唯一标识符)和一个日期字段(日期)来完成它的事情。我可以运行它并等待很长时间,它将遍历整个数据帧并输出通过比较序列(在本例中为日期)计算得出的统计数据帧。我有一个所有唯一键值的列表,希望将其传递给多处理,以便列表中的每个项目用于对输入 df 进行子集化,然后将该工作传递给处理器。所以我创建了一个 def 函数,它将值传递给自定义函数。
def taska(id, data, key, date):
cdata = data[data[key]==id]
return vt.make_breakpts (data=cdata, key=key, date=date)
然后使用 functools 设置不变的变量和一个空列表来捕获结果并使用 unique() 获取唯一键值列表。
partialA = functools.partial(taska, data=pgdf, key=VID, date=PDATE)
resultList = []
vidList = list(pgdf['VESSEL_ID'].unique())
如何将列表值传递给多核处理器并将每个进程的结果返回到列表中? 我用了...
with Pool(14) as pool:
for results in pool.imap_unordered(partial_task, bwedf.iterrows()):
ResultsList.append(results[0])
.iterrows() 起作用是因为在那个例子中我使用的是数据框,对于简单列表是否有类似的方法?
【问题讨论】:
标签: python list multiprocessing