Python: лучший способ перезагрузить класс в XMLRPC Server

1

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

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

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

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

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

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

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

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

Теги:
xml-rpc

2 ответа

4
Лучший ответ

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

  • 0
    Обратите внимание, что функция reload перемещена в Python 3.
1

Если перезагрузка не работает, вы можете попробовать twisted.python.rebuild; ваше приложение не должно быть написано в Twisted для использования этой утилиты twisted.python.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню