Python 模块 - 运行时会发生啥?

Posted

技术标签:

【中文标题】Python 模块 - 运行时会发生啥?【英文标题】:Python Modules - What happens during runtime?Python 模块 - 运行时会发生什么? 【发布时间】:2019-11-16 11:41:55 【问题描述】:

我是编写 python 模块的新手,我很好奇你的模块在运行时会发生什么?例如,模块是否在需要时加载和卸载?我遇到的具体情况是这样的:

我已经构建了一些使用内存缓存的模块,该模块是从一个查看缓存的导出函数调用的,有一些逻辑,然后根据缓存中的值返回一个布尔值。在这种特定情况下,每次调用函数时都会更新缓存,该缓存是否会在这些多次调用中持续存在?还是在不使用模块时将其卸载,从而从内存中清除我的缓存并在再次访问模块时重新加载?

更广泛地说,在我的 python 应用程序运行期间,我可以期待我的模块的行为是什么?

【问题讨论】:

【参考方案1】:

当你导入一个模块时,它的代码会被执行并且生成的模块会被放置在sys.modules

之后,模块会被分配给具有模块名称的变量。例如,如果您执行import os,则模块将插入到sys.modules 中,键为os,并分配给名为os 的全局变量。

在正常操作中,模块永远不会被卸载,因此您不必担心数据丢失或类似情况。也就是说,像importlib.reload 这样的函数在某些情况下会导致模块丢失数据。

不过,只要您不搞乱内部结构,您就可以放心地假设缓存中的数据在整个程序运行时保持有效。

【讨论】:

以上是关于Python 模块 - 运行时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

当我增加 ec2 实例的运行量大小时会发生啥

当用户关闭浏览器等待长时间运行的 Web 服务调用时会发生啥?

当 docker-maven 插件尝试构建映像时会发生啥?

当我们刷新网页时会发生啥?

当公测再次关闭时会发生啥

当我们在 JavaScript 中将原语视为对象时会发生啥?