ノunique丶执念ャ 2024-07-03 23:34 采纳率: 0%
浏览 5

并发编程,进程终止错误



import pandas as pd
import numpy as np
import os
from concurrent.futures import ProcessPoolExecutor, as_completed

csv_folder_path = r'D:\文档\work_document\xianyu_orders\240701\archive (11)\london_clean'
excel_file_path = r'D:\文档\work_document\xianyu_orders\240701\archive (11)\新建 Microsoft Excel 工作表(1).xlsx'


def process_file(file_path):
    try:
        new_StdorToU = os.path.splitext(os.path.basename(file_path))[0].split('_')[2]
        df_csv = pd.read_csv(file_path)
        transform = df_csv.iloc[0:48, 4].values
        transform = transform.reshape(1, 48) if transform.size == 48 else None
        df = pd.DataFrame(transform) if transform is not None else pd.DataFrame()
        return [new_StdorToU] + list(df.iloc[0])
    except Exception as e:
        print(f"Error processing {file_path}: {e}")
        return None  # 返回None或者合适的错误标识,避免将异常信息加入到results中

# 初始化results列表
results = []

# 使用ProcessPoolExecutor来并行处理文件
with ProcessPoolExecutor() as executor:
    file_paths = [os.path.join(csv_folder_path, f) for f in os.listdir(csv_folder_path) if f.endswith('.csv')]
    # 使用字典推导式创建future到文件路径的映射
    future_to_file = {executor.submit(process_file, file_path): file_path for file_path in file_paths}
    for future in as_completed(future_to_file):
        file_path = future_to_file[future]
        try:
            data = future.result()
            if data is not None:  # 确保data不是None
                results.append(data)
        except Exception as e:
            print(f"Error processing {file_path}: {e}")

# 将结果转换为DataFrame并写入Excel
df = pd.DataFrame(results)
if not df.empty:
    df.to_excel(excel_file_path, index=False)
    print('所有CSV文件的数据提取和写入操作完成。')
else:
    print('没有数据写入Excel。')

求道友指教,以上代码为什么报这个错误啊?求解决方法
Error processing D:\文档\work_document\xianyu_orders\240701\archive (11)\london_clean\cleaned_household_MAC005567.csv: A process in the process pool was terminated abruptly while the future was running or pending.

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-07-03 23:34
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你好!看起来你在使用 Python 的 ProcessPoolExecutor 来并行处理 CSV 文件时遇到了问题。错误信息 "A process in the process pool was terminated abruptly while the future was running or pending." 表示在执行过程中,某个子进程意外地被终止了。这可能是由多种原因造成的,例如资源不足、操作系统限制、代码中的异常等。

    以下是一些可能的解决方案和排查步骤:

    1. 资源限制:检查系统资源,确保有足够的内存和CPU资源来运行多个进程。

    2. 操作系统限制:操作系统可能对进程数量有限制。可以在命令行使用 ulimit -u 查看和设置进程数限制。

    3. 代码中的异常:检查 process_file 函数中的代码,确保没有未捕获的异常。你已经在函数中添加了异常处理,但是需要确保所有可能的异常情况都被考虑到了。

    4. 文件路径问题:确保所有的文件路径都是正确的,并且程序有权限访问这些文件。

    5. Pandas 版本问题:确保你使用的 Pandas 库是最新版本的,因为旧版本可能存在一些已知的bug。

    6. 调试:尝试减少并行进程的数量,比如使用 ProcessPoolExecutor(max_workers=1),看看是否还会出现相同的错误。这可以帮助确定问题是否与并发有关。

    7. 日志记录:增加更详细的日志记录,以便更好地跟踪问题发生的位置和原因。

    8. 进程间通信:如果问题与进程间通信有关,检查是否有进程因为等待数据而超时或被意外终止。

    9. Python 环境:确保你的 Python 环境是稳定和一致的,有时候虚拟环境的问题也会导致不可预见的错误。

    10. 硬件问题:虽然不常见,但硬件问题(如内存条故障)有时也会导致类似的问题。

    如果以上步骤都不能解决问题,你可以尝试使用其他方法来并行处理数据,比如使用线程(ThreadPoolExecutor)或者异步编程。

    至于参考链接,这里有一些可能对你有帮助的资源:

    希望这些信息能帮助你解决问题!如果还有其他问题或需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月3日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见