You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python multiprocessing.Queue无法接收子进程返回的pandas DataFrame问题

问题根源

你读取队列的判断逻辑错误:

  • 你使用了while queue.full()作为循环触发条件,queue.full()仅当队列存储容量达到上限时才会返回True,而multiprocessing.Queue默认是无上限容量,你只放入了2个DataFrame,队列永远不会触发full()状态,所以这个循环从头到尾都不会执行,自然取不到任何数据。
  • 你已经提前对所有子进程执行了join()操作,说明所有子进程都已经完成计算、把结果放入队列后,才会执行到队列读取的逻辑,不需要担心读的时候数据还没生产。

解决方法

两种可行的修改方案,优先推荐第一种:

  1. 按已知的返回结果数量读取:你启动的子进程数量等于分片数量len(df_parts),每个子进程都会返回1个结果,直接循环对应次数读取即可,逻辑最可靠。
# 把原来的while queue.full()那段替换成下面的代码
result = []
for _ in range(len(df_parts)):
    df_part = queue.get()
    print(df_part)
    result.append(df_part)

# 最后可以合并成完整DataFrame
final_df = pd.concat(result, ignore_index=True)
print(final_df)
  1. 按队列非空判断读取:因为已经join完所有子进程,队列里的所有数据都已经写入完成,此时判断队列非空再读取也是可行的。
while not queue.empty():
    print(queue.get())

效果说明

修改后即可正常输出处理后的分片DataFrame,最终也能拼接得到完整的结果数据集,不存在DataFrame序列化或者队列传输的问题。

内容的提问来源于stack exchange,提问作者buhtz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:42:03