gpt4 book ai didi

python reload 模块没有立即生效

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:45 25 4
gpt4 key购买 nike

请参阅下面的重现代码。

跟踪内存泄漏我发现 reload(module) 并没有立即生效。

下面的程序应该打印 0,1,2,3,4,但是当快速执行时,它会打印 0,0,0,3,3 等序列。将 sleep() 函数中的时间增加到例如 1 秒似乎可以解决此问题。

请注意,此代码是更实用代码的简化版本,只是为了重现问题,我需要处理现实应用中的情况。

有人知道如何确保稳定性吗?

我在 Windows 上,cpython27 32 位。

感谢阅读本文。

# this program assumes folder lib\mymodule exists and contains __init__.pyimport timeimport ioimport gcmodulefile = 'c:\\python27\\lib\\mymodule\\simplemodule.py'for cnt in range(5):    modulecode = """def runmodule():    return %i"""%(cnt)    obj = io.open(modulefile, u'wb')    obj.write(modulecode)    obj.close()    if cnt==0:        import mymodule.simplemodule    else:        reload(mymodule.simplemodule)    gc.collect()    print mymodule.simplemodule.runmodule()    time.sleep(0.05)

最佳答案

问题是 pyc 不会重新生成,除非它相对于未定义的 py 文件已过时。如果以一秒的分辨率检查文件修改时间,您的更新可能会被忽略,并且会调用过时的 pyc 而不是更新后的源。

  • 尝试在每次导入重新加载 之间删除pyc 文件。

  • 或者,您可以设置环境变量 PYTHONDONTWRITEBYTECODE=1

  • 您还可以使用 execfile 绕过导入逻辑.

关于python reload 模块没有立即生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10561349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com