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

Python多模块执行时动态读取文件数据问题求解

解决Python模块导入缓存导致的动态数据读取问题

问题核心

你遇到的问题是Python模块导入的缓存机制导致的:当main.py中导入function2时,Python会立刻加载function2.py,此时function2里的from data.data import *会执行,但这时候data.py还没被function1写入内容,所以导入的data是空值。后续即使function1修改了data.py,已经缓存的模块不会自动重新加载,导致function2读取的还是旧的空数据。

解决方案

方案1:在函数内部动态重新加载模块

把模块导入放在函数执行时,并且强制重新加载,确保每次都读取最新的data.py内容。

修改function2.py:

def function2():
    import importlib
    # 导入并重新加载data模块
    data_module = importlib.reload(__import__('data.data'))
    print(len(data_module.data))

或者分步写更清晰:

def function2():
    import importlib
    from data import data
    importlib.reload(data)
    print(len(data.data))

方案2:改用普通数据文件存储(推荐)

用Python模块存动态数据本身就容易踩缓存坑,换成JSON这类通用数据格式更稳妥,完全绕开模块导入的问题。

修改function1.py:

import json

def function1():
    data = [1,2,3,4,5]
    with open("/data/data.json", "w") as f:
        json.dump(data, f)
    print(len(data))

修改function2.py:

import json

def function2():
    with open("/data/data.json", "r") as f:
        data = json.load(f)
    print(len(data))

方案3:直接传递变量(无需持久化时用)

如果数据不需要存在文件里,只是程序运行时在函数间传递,直接在main.py中转递最省事。

修改main.py:

from functions import function1, function2

data = function1()
print("function 1 done")
function2(data)

修改function1.py:

def function1():
    data = [1,2,3,4,5]
    print(len(data))
    return data

修改function2.py:

def function2(data):
    print(len(data))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:35:28