如何在Anaconda Jupyter中用Pool多进程实现Excel中3个表格的乘法运算?
在Anaconda Jupyter中用多进程处理Excel表格乘法
方案一:使用multiprocessing.Pool手动管理多进程
适合小到中等规模的Excel文件,手动控制进程分配,逻辑直观。
前置依赖
确保安装所需库:
conda install pandas openpyxl
实现代码
import pandas as pd from multiprocessing import Pool # 定义单个工作表的处理函数 def process_single_sheet(sheet_name): # 读取指定工作表 df = pd.read_excel('your_data.xlsx', sheet_name=sheet_name) # 执行乘法运算(示例:col1和col2相乘生成result列) df['result'] = df['col1'] * df['col2'] # 保存处理后的结果 df.to_excel(f'processed_{sheet_name}.xlsx', index=False) return f"Completed processing {sheet_name}" if __name__ == '__main__': # 目标工作表列表 target_sheets = ['Sheet1', 'Sheet2', 'Sheet3'] # 创建进程池(进程数可根据CPU核心数调整) with Pool(processes=3) as pool: # 映射任务到进程池 results = pool.map(process_single_sheet, target_sheets) # 输出处理结果 for res in results: print(res)
Jupyter环境注意事项
必须将主逻辑包裹在if __name__ == '__main__':块中——Jupyter的交互式内核会重复导入模块,缺少这个判断会导致无限创建子进程,引发错误。
方案二:使用Dask自动实现多进程处理
适合大体积Excel文件,Dask会自动处理并行调度、内存优化,无需手动管理进程池。
前置依赖
安装Dask及Excel处理扩展:
conda install dask dask-excel
实现代码
import dask.dataframe as dd from dask.distributed import Client # 启动本地Dask客户端(默认采用多进程模式) client = Client() # 读取指定的三个工作表,返回Dask DataFrame字典 sheet_dfs = dd.read_excel('your_data.xlsx', sheet_name=['Sheet1', 'Sheet2', 'Sheet3']) # 定义乘法处理函数(与Pandas语法完全兼容) def apply_multiplication(df): df['result'] = df['col1'] * df['col2'] return df # 批量处理所有工作表 processed_dfs = {name: apply_multiplication(df) for name, df in sheet_dfs.items()} # 计算并保存结果(Dask自动并行执行) for sheet_name, dask_df in processed_dfs.items(): # compute()触发实际计算,将Dask DataFrame转为Pandas DataFrame后保存 dask_df.compute().to_excel(f'dask_processed_{sheet_name}.xlsx', index=False) # 关闭Dask客户端 client.close()
Dask方案优势
- 自动处理多进程调度,无需手动维护进程池;
- 支持分块读取超大Excel,避免内存溢出;
- 语法与Pandas高度兼容,学习成本低。
内容的提问来源于stack exchange,提问作者Даут Цицкиев
相关产品推荐
相关产品推荐

