我有一个cpu密集的代码,它使用重型字典作为数据(大约250M数据)。我有一个多核处理器,并希望利用它,以便我一次可以运行多个任务。该字典大多是只读的,可能每天更新一次。
如何在不重复字典的情况下在python中编写此代码?
我知道python线程不使用本地线程,也不会提供真正的并发。我可以使用多处理模块而不在进程之间序列化数据吗?
我来自java世界,我的需求会像java线程那样可以共享数据,在多个处理器上运行并提供同步原语。利用python中的多处理器共享数据
3
A
回答
1
您可以在进程间共享只读数据,只需使用fork
(在Unix上;在Windows上不是简单的方式),但是不会捕获“每天一次更改”(您需要明确地为每个进程更新自己的副本的方式)。像dict
这样的本机Python结构只是没有设计用于共享内存中的任意地址(你必须编写一个支持C语言的dict
变体),所以它们不提供任何安慰。
您可以使用Jython(或IronPython)以与Java(或C#)完全相同的多线程功能获得Python实现,包括多个并发线程的多处理器使用。
1
使用shelve
作为字典。由于写入很少,所以不应该存在共享它的问题。
0
看看stdlib中的这个: http://docs.python.org/library/multiprocessing.html 有一些很棒的功能可以让你很容易地在进程间共享数据结构。
相关问题
- 1. Python,WSGI,多处理和共享数据
- 2. 多处理数据共享
- 3. 共享numpy数组的Python多处理
- 4. python多处理中的共享变量
- 5. Python多处理 - 数组共享?
- 6. 在多处理器中共享Python对象:值或管理器
- 7. python在多处理中共享dict()中共享队列()
- 8. 使用Python多重处理更新共享只读数据
- 9. 在Python中使用多处理的对象的共享数组
- 10. 具有共享数据的Python多处理池
- 11. python多处理器管理器和复合模式共享
- 12. Python多处理 - 共享内存
- 13. Python多处理和共享变量
- 14. 多处理 - 共享阵列
- 15. 多处理中的共享内存
- 16. 多处理共享对象中的共享对象
- 17. 如何将实时处理的数据从C#共享到python
- 18. 芹菜工和共享列表使用python的多处理
- 19. 在python多重处理中共享更复杂的对象
- 20. 在内存中的Python多处理共享文件
- 21. python多处理,做进程共享一个公共变量?
- 22. Python的共享并行处理
- 23. python多处理:共享比特数组(bitarray 0.8.1)
- 24. python多处理器管理器 - 共享列表 - 连接重置对等104
- 25. 与多个python程序共享数据
- 26. 使用python多重处理功能共享一个信号灯
- 27. 保护多处理器中的共享内存区域
- 28. 在多处理中使用共享数组来保存值
- 29. Python的多处理和共享numpy的阵列
- 30. 跨多个数据处理程序共享Oracle连接
从文档看来,值提取将使用pickle返回数据的副本?对我来说一个任务通常访问字典的1/3,这将意味着在这种方法中大量的临时对象 – TigrisC 2010-01-26 01:05:58
然后,对于您的问题,CPython没有好的解决方案。只有一系列不太可怕的,都涉及某种数据库。 – 2010-01-26 01:11:43