2014-03-27 16 views
5

我已經使用Python的多處理包實現了一個生產者多用戶模式。消費者應該把結果放在一本字典中。這個字典的關鍵字是單詞,值是大的Scipy稀疏矩陣。每個消費者將它看到的每個單詞的值添加到共享字典中該單詞的主向量中。我需要Python多處理環境中的高效共享字典

我已經使用Manager.dict()來實現這個共享字典,但它非常緩慢。每個進程的CPU利用率大約爲15%,並且比單個進程稍微好一點。 每個消費者從共享字典中提取一個項目,爲該項目的值添加一個稀疏矩陣並更新共享字典中的項目。

有沒有更有效的解決方案?

+0

'memcache' - http://memcached.org/ – Torxed

回答

3
import memcache 

memc = memcache.Client(['127.0.0.1:11211'], debug=1); 
memc.set('top10candytypes', {1 : 2, "3" : [4,5,6]}) 

bestCandy = memc.get('top10candytypes') 
print(bestCandy) 

我不是memcache的專家,因爲我剛開始自己​​使用它。但是,如果你有多個線程需要訪問相同的數據,或者你只需​​要高效地存儲內容而不用RAM就可以了。

+0

如何使用memcache:只需sudo apt-get install memcached安裝memcache服務器,然後使用pip install python-memcached安裝memcache python客戶端。 – Ash

+0

問題是我的單詞(鍵)是unicode,但是這個python memcache客戶端不接受python中的unicode字符串。 – Ash

+1

我想通過使用另一種字符串編碼(UTF-8?)來解決unicode問題應該不會太困難。我很懷疑memcache是​​否比python多處理器管理器更快。有沒有人有基準?我很好奇,因爲我做了類似的事情,我發現唯一的快速解決方案是使用多處理陣列的共享內存,但是這感覺相當混亂。 –