簡體   English   中英

Python類的共享內存

[英]Shared Memory for Python Classes

因此,當我學習Python中的類時,我被告知類級別屬性在給定類的所有實例之間共享。 我認為我以前從未看過任何其他語言。

結果,我可能有多個實例,比如說一個DB類,它提取數據DB數據並將其轉儲到類級別的屬性中。 這樣,任何需要任何數據的實例都可以訪問它,而不必去緩存或保存的文件來獲取它。

目前,我正在調試一個分析類,該類可以通過一種低效的方式來獲取數據庫數據-我目前正在嘗試使其更快。 現在,加載數據庫數據需要幾分鍾。 而且我為ndarrays選擇的數據格式不希望通過numpy.save保存到文件中(我現在不記得該錯誤了)。 每次進行一些微調時,數據都會丟失,並且必須等待幾分鍾才能重新加載。

因此我想到可以創建一個簡單的類來保存數據。 我不需要更改的類可以在單獨的iPython控制台上運行(我正在使用Anaconda,Python 2.7和Spyder)。 這樣,我可以在分析類的初始化中將分析類鏈接到共享數據類。 像這樣:

def __init__(self):
  self.__shared_data = SharedData()
  self.__analytics_data_1 = self.__shared_data['analytics_data_1']

我的想法是,然后我將在Analytics類方法中寫入self.__analytics_data_1 它將自動更新為分片數據類。 我將打開一個iPython控制台,除了在調試過程中保留共享數據類的實例外,什么也不做。 這樣,當我不得不重新加載並重新實例化分析類時,它只會獲取我已經捕獲的所有數據。 顯然,如果數據本身存在問題,則需要手動將其刪除。

顯然,我不想為我構建的每個工具都使用相同的共享數據類。 但這很容易解決。 我之所以提到所有這些,是因為我無法在網上找到類似此類的食譜。 那里似乎有很多食譜,所以我認為缺少食譜可能表明這是一個壞主意。

我試圖在PHP項目上通過Memcache實現類似的目的。 但是,在那個項目中,我有很多讀寫操作,並且看來代碼正在引起某種形式的寫沖突。 因此數據沒有得到更新。 (而且Memcache不能保證數據甚至會在那里。)防止這種寫沖突意味着很多額外的代碼,額外的處理時間,最終導致代碼變得太慢而無法使用。 我想我可能會再次嘗試使用Python中的此共享內存以及將共享內存用於調試目的。

有什么想法嗎? 警告?

如果要在類實例之間共享數據,則應該執行以下操作:

class SharedDataClass(object):
  shared_data = SharedData()

這些SharedData實例將在您的類實例之間共享,除非您在構造函數中重寫。 小心,GIL鎖定可能會影響性能!

“在控制台之間”或進程之間共享數據是另一回事。 它們是獨立的過程,並且當然不共享類屬性。 在這種情況下,您需要IPC(可以是文件系統,數據庫,具有打開套接字的進程以進行連接等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM