Python:在 XMLRPC 服务器中重新加载类的最佳方法
我有一个多线程 xmlrpc 服务正在运行,它在内存中存储了大约 2G 的大量数据。目前,如果我想更新服务器公开的方法,我必须重新启动服务。这里的问题是,如果我重新启动服务,它需要通过使用数据库或使用搁置的数据将内存中的所有数据加载回内存。
我正在使用这样的方法:
xmlrpc_getUser(self, uid):
return self.users[uid]
我希望我能做的就是使用这些方法作为另一个模块的代理,所以我的方法看起来更像这样
xmlrpc_getUser(self, uid):
return self.proxy.getUser(uid)
这样我可以更新开发服务器上的代码,然后只需复制我的更新代理模块到生产服务器,无需重新启动。
我尝试添加 导入服务_代理 到我的 xmlrpc 服务控制器的构造函数,但我认为该模块已缓存并且不会重新加载。
有没有好的方法可以做到这一点?谢谢。
I have a multit-threaded xmlrpc service running which stores a huge amount of data ~2G in memory. Currently, if I want to update a method the server exposes I have to restart the service. The problem here is that if I restart the service it needs to load all of the data it had in memory back into memory by using a database or using shelved data.
I am using methods like this:
xmlrpc_getUser(self, uid):
return self.users[uid]
What I was hoping I could do is just use these methods as a proxy to another module, so my methods would look more like this
xmlrpc_getUser(self, uid):
return self.proxy.getUser(uid)
This way I could update code on the development server then simply copy my update proxy module to the production server without the need for a restart.
I tried adding
import service_proxy
to the constructor of my xmlrpc service controller, but I think the module is cached and won't reload.
Is there a good way to do this? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 reload 方法。您需要编写一些代码来检查模块文件的上次修改时间。
You could use the reload method. You would need to write some code to check the last modified time of the modules file.
如果重新加载不起作用,您可以尝试
twisted.python .rebuild
;您的应用程序无需使用 Twisted 编写即可使用这个 twins.python 实用程序。我最近也看到了这个 livecoding 的东西(“Python 的代码重新加载库”),但是它谈论了一个自定义模块系统,但我不知道那里发生了什么。
If reload doesn't work, you could try
twisted.python.rebuild
; your application need not be written in Twisted to use this twisted.python utility.I also recently saw this livecoding thing ("a code reloading library for Python"), but it talks about a custom module system and I don't know what's going on there.