2015-10-05 48 views
1

有一些對象需要在同一臺機器上的兩個python進程之間共享,我使用python memcached將對象存儲在一個進程中,並在另一個進程中使用它們。但是,即使可以在想要使用它們的進程中檢索它們,調用它們的方法也不會返回任何結果(不是預期的結果)。從Memcached中獲取對象的調用方法

如果有人有必要的輸入,在這種場景中發生了什麼 - 是完全通過的對象,並且兩個進程都共享它的狀態? ,或者只傳遞一個副本,並且一個進程所做的更改在其他 中不可見 - 可以採用哪些其他技術/庫來實現Python進程之間的共享對象。

謝謝

+1

Memcached僅存儲字符串。傳遞對象可以通過在寫入之前和從緩存中分別讀取之後序列化和解串行來實現。但是在[IPC](https://docs.python.org/2/library/ipc.html)等進程之間共享對象的方法更爲有效。 – marekful

回答

0

Memcached按照您的描述存儲字符串值和非豐富對象。

您描述的內容聽起來像是發佈者訂閱者應用程序 - 一個進程產生數據,另一個進程對其執行操作。

Memcached不是pub/sub的正確工具。你需要一個你可以自動添加和彈出的列表。雖然可以在Memcached中存儲列表的字符串表示形式,但不能在進程中以原子方式在該列表中添加和刪除元素。

看看Redis。它具有豐富的數據結構,非常適合pub/sub和成熟的Python clients使用。

對於簡單的實現,您可以讓您的一個進程將(LPUSH)數據添加到列表中。另一個進程可能會彈出(RPOP)關閉此列表中的數據並在其上運行一個方法。這會給你一個很好的IPC隊列。

如果您需要更復雜的方法,請查看Redis pub/sub docs - 它有一個消息傳遞系統,無需輪詢隊列獲取新值。