Python: лучший способ перезагрузить класс в XMLRPC Server - PullRequest
1 голос
/ 14 января 2010

У меня запущена многопоточная служба xmlrpc, которая хранит огромный объем данных ~ 2G в памяти. В настоящее время, если я хочу обновить метод, который предоставляет сервер, я должен перезапустить службу. Проблема здесь заключается в том, что если я перезапускаю службу, ей нужно загрузить все данные, которые были в памяти, обратно в память, используя базу данных или данные с полок.

Я использую такие методы:

xmlrpc_getUser(self, uid):
    return self.users[uid]

Я надеялся, что смогу использовать эти методы в качестве прокси для другого модуля, поэтому мои методы будут выглядеть примерно так

xmlrpc_getUser(self, uid):
    return self.proxy.getUser(uid)

Таким образом, я мог бы обновить код на сервере разработки, а затем просто скопировать мой прокси-модуль обновления на рабочий сервер без необходимости перезапуска.

Я пытался добавить import service_proxy конструктору моего сервисного контроллера xmlrpc, но я думаю, что модуль кэшируется и не будет перезагружаться.

Есть ли хороший способ сделать это? Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 января 2010

Вы можете использовать метод reload . Вам нужно написать код, чтобы проверить время последнего изменения файла модулей.

1 голос
/ 25 января 2010

Если перезагрузка не работает, вы можете попробовать <a href="http://twistedmatrix.com/documents/current/api/twisted.python.rebuild.html" rel="nofollow noreferrer">twisted.python.rebuild</a>; Ваше приложение не должно быть написано на Twisted, чтобы использовать эту утилиту twisted.python.

Я также недавно видел эту вещь livecoding ("библиотека перезагрузки кода для Python"), но она говорит о системе пользовательских модулей, и я не знаю, что там происходит.

...