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缓存在内部。我想我希望有人已经砍死那之前,以适应这个问题,所以我没有;-) –