我有一个包装一些Active Directory函数的对象,这些函数在我的代码库中经常使用。我有一个便利功能来创建它,但每次创建一个缓慢且低效的SSL连接。我可以在某些地方改进它的方法是将它传递给循环中的函数,但这并不总是方便的。
该类是无状态的,因此它是线程安全的,可以在每个Django实例中共享。它应该保持其AD连接至少几分钟,理想情况下不超过一小时。还有其他非AD对象我想做同样的事情。
我使用过各种缓存类型,包括内存,是否适合将它们用于功能对象?我认为它们仅用于(可序列化)数据。
或者:是否有一个Django适合的服务定位器模式或连接池,就像你在Java应用程序中经常看到的那样?
谢谢, 乔尔
答案 0 :(得分:2)
我找到了一个似乎运行良好的解决方案,它只是一个类似于Java中的静态变量的Python功能。
def get_ad_service():
if "ad_service" not in get_ad_service.__dict__:
logger.debug("Creating AD service")
get_ad_service.ad_service = CompanyADService(settings.LDAP_SERVER_URL,
settings.LDAP_USER_DN,
settings.LDAP_PASSWORD)
logger.debug("Created AD service")
else:
logger.debug("Returning existing AD service")
return get_ad_service.ad_service
我的代码已经调用此函数来获取AD服务的实例,因此我不必再做任何事情来使其持久化。
我在这里找到了这个和类似的解决方案:What is the Python equivalent of static variables inside a function?
很高兴听到其他选择:)