2010-01-26 40 views
3

我有一个cpu密集的代码,它使用重型字典作为数据(大约250M数据)。我有一个多核处理器,并希望利用它,以便我一次可以运行多个任务。该字典大多是只读的,可能每天更新一次。
如何在不重复字典的情况下在python中编写此代码?
我知道python线程不使用本地线程,也不会提供真正的并发。我可以使用多处理模块而不在进程之间序列化数据吗?

我来自java世界,我的需求会像java线程那样可以共享数据,在多个处理器上运行并提供同步原语。利用python中的多处理器共享数据

回答

1

您可以在进程间共享只读数据,只需使用fork(在Unix上;在Windows上不是简单的方式),但是不会捕获“每天一次更改”(您需要明确地为每个进程更新自己的副本的方式)。像dict这样的本机Python结构只是没有设计用于共享内存中的任意地址(你必须编写一个支持C语言的dict变体),所以它们不提供任何安慰。

您可以使用Jython(或IronPython)以与Java(或C#)完全相同的多线程功能获得Python实现,包括多个并发线程的多处理器使用。

1

使用shelve作为字典。由于写入很少,所以不应该存在共享它的问题。

+0

从文档看来,值提取将使用pickle返回数据的副本?对我来说一个任务通常访问字典的1/3,这将意味着在这种方法中大量的临时对象 – TigrisC 2010-01-26 01:05:58

+0

然后,对于您的问题,CPython没有好的解决方案。只有一系列不太可怕的,都涉及某种数据库。 – 2010-01-26 01:11:43