我有一个 cpu 密集型代码,它使用繁重的字典作为数据(大约 250M 数据)。我有一个多核处理器并想利用它,以便我一次可以运行多个任务。字典大多是只读的,可能每天更新一次。
如何在不复制字典的情况下用 python 编写这个?
我知道 python 线程不使用本机线程并且不会提供真正的并发性。我可以使用多处理模块而不在进程之间序列化数据吗?
我来自 java 世界,我的要求是可以共享数据、在多个处理器上运行并提供同步原语的 java 线程。
问问题
471 次
3 回答
1
用于shelve
字典。由于写入很少,因此共享它应该没有问题。
于 2010-01-26T00:54:57.273 回答
1
您可以简单地在进程之间共享只读数据fork
(在 Unix 上;在 Windows 上不容易),但这不会赶上“一天一次的变化”(您需要为每个过程来更新自己的副本)。像这样的原生 Python 结构dict
并非设计用于共享内存中的任意地址(您必须dict
在 C 中编写支持该地址的变体),因此它们无法提供任何安慰。
您可以使用 Jython(或 IronPython)来获得具有与 Java(或分别为 C#)完全相同的多线程能力的 Python 实现,包括多个同时线程的多处理器使用。
于 2010-01-26T01:11:07.530 回答
0
看看 stdlib 中的这个:http: //docs.python.org/library/multiprocessing.html 有很多很棒的功能可以让您在进程之间非常轻松地共享数据结构。
于 2010-01-26T02:21:53.180 回答