Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中如何在内存中保存共享函数对象?_Python_Django_Caching - Fatal编程技术网

Python 在Django中如何在内存中保存共享函数对象?

Python 在Django中如何在内存中保存共享函数对象?,python,django,caching,Python,Django,Caching,我有一个对象,它包装了一些在我的代码库中经常使用的Active Directory函数。我有一个方便的函数来创建它,但是每次创建SSL连接时,它都是缓慢而低效的。在某些地方,我可以改进它的方法是将其传递给循环中的函数,但这并不总是方便的 该类是状态无关的,因此是线程安全的,可以在每个Django实例中共享。它应该保持其广告连接至少几分钟,理想情况下不超过一小时。还有其他非广告对象,我也希望这样做 我已经使用了各种缓存类型,包括内存中的缓存,是否适合将它们用于功能对象?我认为它们只适用于(可序列化

我有一个对象,它包装了一些在我的代码库中经常使用的Active Directory函数。我有一个方便的函数来创建它,但是每次创建SSL连接时,它都是缓慢而低效的。在某些地方,我可以改进它的方法是将其传递给循环中的函数,但这并不总是方便的

该类是状态无关的,因此是线程安全的,可以在每个Django实例中共享。它应该保持其广告连接至少几分钟,理想情况下不超过一小时。还有其他非广告对象,我也希望这样做

我已经使用了各种缓存类型,包括内存中的缓存,是否适合将它们用于功能对象?我认为它们只适用于(可序列化的)数据

或者:是否有适合Django的服务定位器或连接池模式,就像您在Java应用程序中经常看到的那样

谢谢,
Joel

我找到了一个似乎运行良好的解决方案,它只是一个Python特性,类似于Java中的静态变量

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
我的代码已经调用了这个函数来获取广告服务的一个实例,所以我不需要做任何进一步的工作来使它持久化

我在这里找到了这个和类似的解决方案:


很高兴听到备选方案:)

以这种方式存储的对象是否贯穿django实例的整个生命周期?这像是一个全局顶级函数还是一个没有显示的对象的方法?如果我回忆并理解正确,它本质上是函数本身的一个静态成员,这意味着它应该在线程运行且模块在内存中的时间内持续。由于我的应用程序是由apachehttpd通过WSGI驱动的,因此只要该处理程序处于活动状态,它就可能被存储,尽管我不确定它们是否被重用。老实说,我不认为这个解决方案是非常好的,因为这些复杂性和生命周期可能是非常可变的事实,所以它可能基本上是没有意义的。