Моя цель — предоставить веб-фреймворку доступ к демону Pyro, который выполняет трудоемкие задачи при первой загрузке. До сих пор мне удавалось хранить в памяти (вне веб-приложения) один экземпляр класса, который берет на себя трудоемкую загрузку при его инициализации. Я также могу запросить его с помощью своего веб-приложения. Код для демона:
Pyro4.expose
@Pyro4.behavior(instance_mode='single')
class Store(object):
def __init__(self):
self._store = ... # the expensive loading
def query_store(self, query):
return ... # Useful query tool to expose to the web framework.
# Not time consuming, provided self._store is
# loaded.
with Pyro4.Daemon() as daemon:
uri = daemon.register(Thing)
with Pyro4.locateNS() as ns:
ns.register('thing', uri)
daemon.requestLoop()
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя создается один экземпляр, он создается только при первом прокси-запросе из веб-приложения. Это нормальное поведение согласно документу. , но не то, что я хочу, так как первый запрос все еще медленный из-за инициализации Thing.
Как я могу убедиться, что экземпляр уже создан, как только запущен демон?
Я думал создать прокси-экземпляр Thing в коде демона, но это сложно, потому что цикл событий должен быть запущен.
ИЗМЕНИТЬ
Оказывается, daemon.register()
может принимать либо класс, либо объект, что может быть решением. Однако это не рекомендуется в документе (ссылка выше), и эта функция, по-видимому, существует только для обратной совместимости.