在 Python 中重新加载模块时管理具有副作用的全局对象
我正在寻找一种方法来正确管理使用某些操作系统资源(如文件或线程)的模块级全局变量。
问题是,当模块重新加载时,我的资源必须在创建新资源之前正确处置(例如文件关闭或线程终止)。
所以我需要一个更好的模式来管理这些单例对象。
I am looking for a way to correctly manage module level global variables that use some operating system resource (like a file or a thread).
The problem is that when the module is reloaded, my resource must be properly disposed (e.g. the file closed or the thread terminated) before creating the new one.
So I need a better pattern to manage those singleton objects.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我一直在阅读有关模块重新加载的文档,这非常有趣:
所以我可以检查对象是否已经存在,并在创建新对象之前处理它们。
I've been reading the docs on module reload and this is quite interesting:
So I could just check if the objects already exist, and dispose them before creating the new ones.
您需要 Monkeypatch 或 fork django 来挂钩 django 开发服务器重新加载功能并执行正确的操作来管理文件关闭等...
但是既然您开发了 django 应用程序,如果您打算使用正确的服务器来为您的应用程序提供服务将来您应该考虑管理全局变量并考虑 信号量 和 所有爵士乐。
但是在走这条路线并实现所有这些容易出错和脱发的困难代码之前。您应该考虑其他解决方案,例如 nosql 数据库(redis,mongodb,neo4j,hadoop。 ..)和后台进程管理器,例如 celery 和 齿轮工。如果所有这些都不适合您的用例,并且您无法避免自己创建和管理文件以及全局变量,那么请考虑 客户端/服务器模式,其中客户端是网络服务器线程,除非你想搞乱NFS。
You need to monkeypatch or fork django to hook into django dev server reloading feature and do the proper thing to manage file closing etc...
But since you develop a django application, if you mean to use a proper server to serve your app in the future you should consider managing your global variables and think about semaphores and all that jazz.
But before going this route and implement all this difficult code prone to error and hair loss. You should consider other solution like nosql databases (redis, mongodb, neo4j, hadoop...) and background process managers like celery and gearman. If all of this don't feet your use-case(s) and you can't avoid to create and manage files yourself and global variables then consider the client/server pattern where clients are webserver threads unless you want to mess with NFS.