多次写入-导入-调用同一Python模块会运行过时的代码

bqf10yzr  于 2022-12-24  发布在  Python
关注(0)|答案(1)|浏览(74)
import sys
import os
import time

MODULE_NAME = "mycode"

def write_module(version):
    with open(MODULE_NAME+".py", "w") as f:
        f.write("def fun():"+os.linesep)
        f.write("    print('Code version:',"+str(version)+")")

for i in range(5):
    # WRITE A PYTHON FILE AUTOMATICALLY
    write_module(i)

    # IMPORT IT
    if MODULE_NAME in sys.modules:
        del sys.modules[MODULE_NAME]
    # time.sleep(1)  # <------------------------ WHY IS IT MANDATORY ????
    module = __import__(MODULE_NAME)
    fun = module.fun

    # CALL IT
    fun()

产生:

Code version: 0
Code version: 0
Code version: 0
Code version: 0
Code version: 0

我期望:

Code version: 0
Code version: 1
Code version: 2
Code version: 3
Code version: 4

我正在开发Python代码,自动编写Python代码。Python导入指令没有像我预期的那样工作。它看起来像一个异步回调。
我不知道为什么,添加time.sleep(1)行可以纠正错误。

nvbavucw

nvbavucw1#

源字节缓存在__pycache__目录中。_validate_timestamp_pyc根据源上次修改时间(没有time.sleep(1)时相同)和源大小对其进行验证。
您可以在从sys.modules删除模块之前删除pyc文件。

if MODULE_NAME in sys.modules:
        os.remove(sys.modules[MODULE_NAME].__cached__)  # Add this
        del sys.modules[MODULE_NAME]

相关问题