簡體   English   中英

在Python中的進程之間共享數據

[英]Sharing data between processes in Python

我有一個復雜的數據結構(用戶定義的類型),在其上執行大量的獨立計算。 數據結構基本上是不可變的。 我基本上說,因為雖然界面看起來是不可變的,但內部有一些懶惰的評估正在進行中。 一些延遲計算的屬性存儲在字典中(通過輸入參數返回昂貴函數的值)。 我想使用Pythons 多處理模塊來並行化這些計算。 我腦子里有兩個問題。

  1. 如何在流程之間最好地共享數據結構?
  2. 有沒有辦法在不使用鎖的情況下處理惰性求值問題(多個進程寫入相同的值)?

提前感謝您的任何答案,評論或啟發性問題!

如何在流程之間最好地共享數據結構?

管道。

origin.py | process1.py | process2.py | process3.py

打破您的程序,以便每個計算都是以下形式的單獨過程。

def transform1( piece ):
    Some transformation or calculation.

對於測試,您可以像這樣使用它。

def t1( iterable ):
    for piece in iterable:
        more_data = transform1( piece )
        yield NewNamedTuple( piece, more_data )

要在單個過程中重現整個計算,您可以執行此操作。

for x in t1( t2( t3( the_whole_structure ) ) ):
    print( x )

您可以使用一點文件I / O包裝每個轉換。 Pickle適用於此,但其他表示(如JSON或YAML)也運行良好。

while True:
    a_piece = pickle.load(sys.stdin)
    more_data = transform1( a_piece )
    pickle.dump( NewNamedTuple( piece, more_data ) )

每個處理步驟都成為獨立的OS級進程。 它們將同時運行並立即消耗所有操作系統級資源。

有沒有辦法在不使用鎖的情況下處理惰性求值問題(多個進程寫入相同的值)?

管道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM