2017-01-25 23 views
1

我有一個對象,它包裝了一些在我的代碼庫中經常使用的Active Directory功能。我有一個方便的功能來創建它,但每次創建的SSL連接速度都很慢並且效率低下。我可以在某些地方改進它的方式是將它傳遞給循環中的函數,但這並不總是方便的。如何在Django的內存中保存一個共享的功能對象?

該類是無狀態的,所以它是線程安全的,可以在每個Django實例中共享。它應該保持AD連接至少幾分鐘,最好不要超過一個小時。還有其他非AD對象,我希望這樣做。

我已經使用了各種緩存類型,包括內存中,是否適合使用這些功能對象?我認爲他們只是爲了(可序列化的)數據。

或者:是否有適合服務定位器或連接池的Django適用模式,就像您在Java應用程序中經常看到的那樣?

感謝, 喬爾

回答

0

我發現,似乎工作得很好,這是一個簡單的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 

我的代碼已經調用這個函數來獲取廣告服務的一個實例,所以我沒有做任何事情進一步,使之持久。

,我發現這一點,並在這裏類似的解決方案:What is the Python equivalent of static variables inside a function?

高興聽到替代:)