Q
如何共享緩存?
4
A
回答
4
我相信你可以使用一個Manager
進程之間共享的字典。理論上應該可以爲所有函數使用相同的緩存。
然而,我認爲一個更理智的邏輯是讓一個進程通過在查詢緩存中查找它們來響應查詢,如果它們不存在,則將該工作委託給子進程,然後緩存結果返回它。你可以很容易地做到這一點與
with concurrent.futures.ProcessPoolExecutor() as e:
@functools.lru_cache
def work(*args, **kwargs):
return e.submit(slow_work, *args, **kwargs)
注意work
返回Future
對象,消費者將不得不等待。 lru_cache
將緩存未來的對象,以便它們自動返回;我相信您可以不止一次訪問他們的數據,但現在無法對其進行測試。
如果您不使用Python 3,則必須安裝concurrent.futures
和functools.lru_cache
的backported版本。
0
Doh。 Katrie的把我在正確的軌道上,我會實現這個問題的答案,但我傻,它甚至比實際更容易[此應用]:
父進程可以實例化對象(從它的中央緩存)和通obj實例入池處理作爲它的參數...
@utils.lru_cache(maxsize=300)
def get_stuff(key):
return Stuff(key)
def iterate_stuff(keys):
for key in keys:
yield get_stuff(key) # doh, rather than just yielding the key, yield the cached obj
def process(stuff_obj):
# get_stuff(key) <-- do this in the parent, rather than the child.
stuff_obj.execute()
def main():
...
keys = get_list_of_keys()
for result in pool.imap(process, iterate_stuff(keys)):
evaluate(result)
...
相關問題
- 1. Facebook共享緩存
- 2. SQLite共享緩存
- 3. ASP.Net緩存共享
- 4. 共享緩存共享模板?
- 5. activerecord內存共享緩存
- 6. 如何與WebView共享圖像緩存
- 7. 如何清除共享鏈接緩存?
- 8. .NET 4.0共享緩存
- 9. 緩存共享信息
- 10. PlayFramework共享緩存問題
- 11. 共享緩存超時
- 12. 控制如何apc.shm_size在字節碼緩存和共享內存之間共享
- 13. 在內存中緩存數據共享
- 14. C#共享內存高速緩存
- 15. 共享內存中高速緩存
- 16. 如何在Java多線程中共享緩存內存?
- 17. 共享nHibernate和休眠二級緩存
- 18. 使用FileProvider共享緩存的圖像
- 19. Netflix hystrix共享請求緩存
- 20. 春季4,共享緩存beetwen節點
- 21. 緩存共享類中的數據
- 22. 的Infinispan:clustred情況下不共享緩存
- 23. 什麼是共享點中的緩存
- 24. Awesomium WebSession是否共享磁盤緩存?
- 25. JPA共享緩存/秒的水平WildFly
- 26. Facebook共享標誌緩存問題
- 27. windows azure:共享緩存 - 全部刪除?
- 28. marklogic樹緩存 - 共享資源?
- 29. PHP Composer中央/共享緩存
- 30. 集羣共享高速緩存
Python的'multiprocessing'模塊對[共享流程之間的狀態(一部分http://docs.python.org/2/library/ multiprocessing.html#共享狀態之間的處理)。 –
是一個進程外緩存的選項嗎?你可以在你的緩存狀態中使用pickle,並將它存儲在redis中嗎? – SingleNegationElimination
@sam事實上,看起來'經理'可以共享一個'dict',我猜想這是lfu緩存在內部。我想我希望有人已經砍死那之前,以適應這個問題,所以我沒有;-) –