我正在尝试使用多处理并行处理数据帧。 data_dict
是DataFrames的字典,当前循环在单个内核中执行,因此我希望并行化此循环。
d = dict()
for symbol, df in data_dict.items():
print(symbol)
dd = df.pct_change(limit=1)
dd['group'] = dd.index.strftime('%d')
d[symbol] = dd.pivot_table(columns='group', values='close', index=dd.index).std()
df = pd.DataFrame.from_dict(d)
for col in df.columns:
df[col] = df[col]/df[col][0]
我遇到一些问题。我想保持简单,但我忘记了如何使用Pool类来解决这个问题。
def process(symbol, df, d):
dd = df.pct_change(limit=1)
dd['group'] = dd.index.strftime('%d')
d[symbol] = dd.pivot_table(columns='group', values='close', index=dd.index).std()
manager = multiprocessing.Manager()
managed_dict = manager.dict()
with multiprocessing.Pool(processes=16) as pool:
for symbol, df in data_dict.items():
print(symbol)
pool.apply_async(process, symbol, df, managed_dict)
执行完上面的第二个代码后,managed_dict不包含任何已处理的DataFrame。