У нас есть оболочка для запроса пены (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
Но это не будет работать в среде многопоточного сервера. Есть какие-нибудь идеи для меня?