我有一个cpu密集型代码,它使用重字典作为数据(大约250M数据)。我有一个多核处理器,并希望利用它,这样我一次可以运行多个任务。字典大多是只读的,可以每天更新一次
我怎么能在python中写这个而不复制字典呢?
我知道python线程不使用本机线程,也不会提供真正的并发。我可以使用多处理模块而不在进程之间序列化数据吗?
我来自java世界,我的要求就像java线程一样,它可以共享数据,在多个处理器上运行并提供同步原语。
答案 0 :(得分:1)
使用shelve
作为字典。由于写入很少,因此共享它不应该存在问题。
答案 1 :(得分:1)
您只需使用fork
(在Unix上,在Windows上没有简单的方法)就可以在进程之间共享只读数据,但这不会发现“每天一次更改”(您需要为每个进程提供一个明确的方法来更新自己的副本)。像dict
这样的原生Python结构并不是设计为存在于共享内存中的任意地址(您必须编写一个支持C dict
变体的变体,因此它们不会提供任何安慰。
您可以使用Jython(或IronPython)来获得与Java(或C#)具有完全相同的多线程功能的Python实现,包括多个同时线程的多处理器使用。
答案 2 :(得分:0)
在stdlib中看一下这个: http://docs.python.org/library/multiprocessing.html 有许多很棒的功能可以让您轻松地在进程之间共享数据结构。