Django: singleton per request?

У нас есть оболочка для запроса пены (SOAP), которую мы используем в нашем приложении следующим образом:

from app.wrapper import ByDesign
bd = ByDesign()

К сожалению, этот экземпляр создан в нескольких точках на запрос, вызывая повторную загрузку файла WSDL пеной, и я думаю, что мы могли бы сэкономить время, заставив bd = ByDesign () вернуть синглтон.

Поскольку suds не является потокобезопасным, это ' d должен быть одноэлементным для каждого запроса.

Единственная загвоздка в том, что я бы хотел сделать так, чтобы мне не приходилось изменять какой-либо код, кроме класса app.wrapper.ByDesign , так что мне не нужно менять код, который его вызывает. Если бы не было требования «одноэлемент на запрос», я бы сделал что-то вроде этого:

class ByDesignRenamed(object):
    pass

_BD_INSTANCE = None
def ByDesign():
    global _BD_INSTANCE
    if not _BD_INSTANCE:
       _BD_INSTANCE = ByDesignRenamed()
    return _BD_INSTANCE

Но это не будет работать в среде многопоточного сервера. Есть какие-нибудь идеи для меня?

8
задан synic 4 June 2011 в 01:06
поделиться