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

Python如何跨.py文件调用dataframe 避免重复读取增加耗时?

跨脚本复用SAS读取生成DataFrame的解决方案

当前重复耗时的核心原因:你在xyz.py中使用from abc import df1的写法时,Python会完整执行abc.py的所有顶层代码,所以每次导入都会重新触发SAS数据拉取逻辑,才会出现两次5分钟耗时的问题。

下面给出两种常用的落地方案:

  • 方案1:本地缓存DataFrame(最推荐,适合多次运行脚本的场景)
    将SAS拉取到的DataFrame存为本地二进制文件,后续导入时优先读本地缓存,仅当缓存不存在时才走SAS拉取逻辑。15万行的数据集读本地缓存耗时通常在1秒以内。
    修改后的abc.py代码如下:
import pandas as pd
import os

# 自定义缓存文件存储路径
cache_file = "./df1_sas_cache.parquet"

if os.path.exists(cache_file):
    # 存在缓存直接读取
    df1 = pd.read_parquet(cache_file)
else:
    # 无缓存时从SAS拉取数据
    df1 = sas.sd2df('df_name', 'work')
    # 拉取后写入缓存,后续所有导入都不用再走SAS
    df1.to_parquet(cache_file, index=False)

xyz.py无需修改,仍用from abc import df1导入即可。如果后续SAS端的源数据更新,删除对应缓存文件就会自动重新拉取最新数据。

  • 方案2:调度脚本统一拉取(适合单次运行整套逻辑、不想生成本地文件的场景)
    把abc.py和xyz.py的业务逻辑封装为函数,不要把SAS读取、业务处理的逻辑写在顶层,再写一个主调度脚本统一拉取一次df1后传递给两个脚本的函数使用。
    修改后的abc.py:
def fetch_df1_from_sas():
    return sas.sd2df('df_name', 'work')

def run_abc_biz(df1):
    # 此处填写abc.py中原有的其他业务处理逻辑
    pass

修改后的xyz.py:

def run_xyz_biz(df1):
    # 此处填写xyz.py中原有的其他业务处理逻辑
    pass

新增主调度脚本main.py:

from abc import fetch_df1_from_sas, run_abc_biz
from xyz import run_xyz_biz

if __name__ == "__main__":
    # 仅执行一次SAS拉取
    df1 = fetch_df1_from_sas()
    # 分别调用两个脚本的业务逻辑,复用同一个df1
    run_abc_biz(df1)
    run_xyz_biz(df1)

直接运行main.py即可,总耗时仅为一次SAS拉取的5分钟,无额外重复开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:39:03