У меня работает многопоточная работа xmlrpc, в которой хранится огромное количество данных ~ 2G в памяти. В настоящее время, если я хочу обновить метод, предоставляемый сервером, я должен перезапустить службу. Проблема здесь в том, что если я перезапущу службу, ей необходимо загрузить все данные, которые она хранила в памяти, в память, используя базу данных или используя отложенные данные.
Я использую такие методы:
xmlrpc_getUser(self, uid):
return self.users[uid]
То, что я надеялся сделать, это просто использовать эти методы в качестве прокси-сервера для другого модуля, поэтому мои методы будут выглядеть больше как
xmlrpc_getUser(self, uid):
return self.proxy.getUser(uid)
Таким образом, я мог бы обновить код на сервере разработки, а затем просто скопировать мой прокси-модуль обновления на рабочий сервер без необходимости перезапуска.
Я попробовал добавить import service_proxy к конструктору моего контроллера службы xmlrpc, но я думаю, что модуль кэшируется и не перезагружается.
Есть ли хороший способ сделать это? Спасибо.
Вы можете использовать метод reload. Вам нужно будет написать код для проверки последнего измененного времени файла модулей.
Если перезагрузка не работает, вы можете попробовать twisted.python.rebuild
; ваше приложение не должно быть написано в Twisted для использования этой утилиты twisted.python.
Я также недавно увидел эту livecoding вещь ( "библиотека перезагрузки кода для Python" ), но он говорит о настраиваемом модуле и я не знаю, что там происходит.
reload
перемещена в Python 3.