2010-01-26 73 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