Python多进程中无法收集子进程返回DataFrame的问题咨询
问题原因及修复方案
核心问题
你用pool.apply_async()返回的是**AsyncResult异步结果对象**,不是子进程实际生成的DataFrame。必须调用该对象的.get()方法,才能获取子进程返回的真实数据。此外代码还有两处细节错误会导致功能异常。
具体修复步骤
修正
pool_handler函数,获取实际返回结果
遍历apply_async返回的结果列表,调用.get()提取DataFrame,同时补全self参数(因为你在函数内调用了self.func,说明这是类成员方法):def pool_handler(self, wkList): with pl(8) as pool: # 注意apply_async需要用args传递参数元组 results = [pool.apply_async(self.func, args=p) for p in wkList] # 等待所有子进程完成,获取实际DataFrame结果 actual_results = [res.get() for res in results] return actual_results修正
func函数的参数索引错误
你的wkList构造的元组顺序是(i, imTime, delim, headers, dtypes),但func里的索引对应错误,导致读取CSV时参数错位:def func(self, iargs): logger.info(f"checking file: {iargs[1].isoformat()} <=> {iargs[0]}") # 修正sep、names、dtype对应的索引 df = pd.read_csv(iargs[0], names=iargs[3], sep=iargs[2], dtype=iargs[4]) return df补全缺失的依赖导入
代码中使用了logging.INFO但未导入logging模块,需添加:import logging
修复后流程说明
- 调用
read_csv生成任务列表wkList,每个元素包含单个文件的读取参数 pool_handler创建进程池,异步提交所有任务- 通过
res.get()逐个获取每个子进程返回的DataFrame,最终返回完整的结果列表 - 进程池的
with块会自动管理池的关闭和任务等待,无需额外手动操作
内容的提问来源于stack exchange,提问作者Shejo284
相关产品推荐
相关产品推荐

