【发布时间】:2021-10-15 01:28:17
【问题描述】:
我不想分享,只是发送一个DataFrame从一个进程到另一个进程。
主要的DataFrame被切割成小块,每一块都由一个单独的进程(在pythonsmultiprocessing的含义中)在它自己的CPU核心上处理。在“子”进程完成后,它们应该发回结果数据帧以再次将它们连接在一起。
但在我的示例中,我到达了脚本的 END,但 DataFrame 永远不会通过 multiprocessing.Queue 对象发回。
#!/usr/bin/env python3
import multiprocessing
import pandas as pd
def worker(df, queue):
print(multiprocessing.current_process())
# create new column
df['X'] = df.b + '-' + df.c
# modify existing column
df.d = df.d.apply(lambda x: x.upper())
# send it back to main process
queue.put(df) # tried .copy() also!
if __name__ == '__main__':
print(pd.__version__)
# initial data
df = pd.DataFrame({
'a': ['A', 'A', 'B', 'B'],
'b': list('XXXX'),
'c': list('6218'),
'd': ['zwei', 'zwei', 'vier', 'neuen']
})
# slice the data frame
df_parts = [
df.iloc[:2].copy(),
df.iloc[2:].copy()
]
processes = []
queue = multiprocessing.Queue()
for i in range(len(df_parts)):
p = multiprocessing.Process(target=worker,
args=(df_parts[i], queue) )
processes.append(p)
p.start()
for p in processes:
p.join()
while queue.full():
print(queue.get())
print('END')
我知道在multiprocessing.Process 实例之间发送数据是在后台腌制的。但我没有收到任何错误。
输出:
1.2.5
<Process name='Process-2' parent=14112 started>
<Process name='Process-1' parent=14112 started>
END
>>>
【问题讨论】:
标签: python pandas multiprocessing