在Python中重新加载模块时管理具有副作用的全局对象

在Python中重新加载模块时管理具有副作用的全局对象,python,module,side-effects,Python,Module,Side Effects,我正在寻找一种方法来正确管理使用某些操作系统资源(如文件或线程)的模块级全局变量 问题是,当重新加载模块时,在创建新资源之前,必须正确处理我的资源(例如,关闭文件或终止线程) 因此,我需要一个更好的模式来管理这些单例对象。我一直在阅读模块重新加载的文档,这非常有趣: 重新加载模块时,其字典(包含模块的 全局变量)被保留。名称的重新定义将覆盖 旧的定义,所以这通常不是问题。如果新的 模块的版本未定义由旧版本定义的名称 版本,旧的定义仍然存在。此功能可用于 如果模块维护对象的全局表或缓存,那么它的优

我正在寻找一种方法来正确管理使用某些操作系统资源(如文件或线程)的模块级全局变量

问题是,当重新加载模块时,在创建新资源之前,必须正确处理我的资源(例如,关闭文件或终止线程)


因此,我需要一个更好的模式来管理这些单例对象。

我一直在阅读模块重新加载的文档,这非常有趣:

重新加载模块时,其字典(包含模块的 全局变量)被保留。名称的重新定义将覆盖 旧的定义,所以这通常不是问题。如果新的 模块的版本未定义由旧版本定义的名称 版本,旧的定义仍然存在。此功能可用于 如果模块维护对象的全局表或缓存,那么它的优势在于 -通过try语句,它可以测试表的存在和跳过 其初始化(如果需要):


因此,我可以检查对象是否已经存在,并在创建新对象之前处理它们。

我一直在阅读模块重新加载的文档,这非常有趣:

重新加载模块时,其字典(包含模块的 全局变量)被保留。名称的重新定义将覆盖 旧的定义,所以这通常不是问题。如果新的 模块的版本未定义由旧版本定义的名称 版本,旧的定义仍然存在。此功能可用于 如果模块维护对象的全局表或缓存,那么它的优势在于 -通过try语句,它可以测试表的存在和跳过 其初始化(如果需要):


因此,我可以检查对象是否已经存在,并在创建新对象之前处理它们。

您需要使用monkeypatch或fork django来连接并执行适当的操作来管理文件关闭等

<强>但由于开发Django应用程序,如果您打算在将来使用适当的服务器为应用程序服务,则应考虑管理全局变量并考虑和./P>


但是在执行这条路线之前,执行所有这些容易出错和脱发的困难代码。您应该考虑其他的解决方案,如数据库(…,…)和后台进程管理器。如果所有这些都不占用你的用例,你就无法避免创建和管理你自己的文件和全局变量,然后考虑客户机是WebServer线程的模式,除非你想弄乱。

< p>你需要用MunKePo补丁或叉Django钩住并做正确的事情来管理文件关闭等。

<强>但由于开发Django应用程序,如果您打算在将来使用适当的服务器为应用程序服务,则应考虑管理全局变量并考虑和./P>


但是在执行这条路线之前,执行所有这些容易出错和脱发的困难代码。您应该考虑其他的解决方案,如数据库(…,…)和后台进程管理器。如果所有这些都不占用你的用例,你就无法避免自己创建和管理文件和全局变量,然后考虑客户机是WebServer线程的模式,除非你想弄乱。< /P>你如何重新加载模块?是否涉及酸洗?它在django中使用,所以无论它用于热重新加载的机制是什么…如何重新加载模块?是否涉及酸洗?它在django中使用,所以无论它用于热重新加载的机制是什么。。。
try:
    cache
except NameError:
    cache = {}