我們正在考慮使用與後端分離的複雜GUI來重新構建一個大型應用程序,以使用新的(Python 2.6)多處理模塊。 GUI /後端接口使用兩個方向交換消息對象的隊列。天真地使用Python多處理會遇到什麼問題?
我剛剛斷定的一件事(暫時,但隨時可以確認)是「對象身份」不會保留在多處理接口中。目前,當我們的GUI向後端發佈消息時,它期望獲得相同的消息並將結果附加爲屬性。在某些情況下,它使用對象標識(if received_msg is message_i_sent:
)來標識返回的消息......並且這看起來可能不適用於多處理。
這個問題是要問什麼「陷阱」這樣你已在實際使用中或看到能想象一個會遇到在天真地使用多模塊,尤其是在重構現有的單過程中的應用。請說明您的答案是否基於實際經驗。獎勵積分爲問題提供可用的解決方法。
編輯:雖然我這個問題的意圖是一般收集的問題的描述,我覺得我犯了兩個錯誤:我把它從一開始社區維基(這可能讓很多人忽略了它,他們不會獲得聲望點),而且我包含了一個過於具體的例子,雖然我很欣賞答案,但可能會讓很多人錯過對一般答覆的請求。我可能會重新提出一個新問題並重新提出這個問題。就目前而言,我只接受一個答案,僅僅是關於這個問題,只要它與我包含的具體例子相關。感謝那些回答過的人!
'message_i_sent.id = id(message_i_sent)'然後'如果received_msg.id == message_i_sent.id'可以解決身份識別(如果存在)。還有很多其他人。 – jfs 2009-12-18 01:37:47
@JF,謝謝,我想我比我的選擇更好,它會使用一個鎖定保護的類屬性增加一個在Message.__ init__中的id。你的方法似乎不需要鎖定或遞增或類屬性,但仍然是完全健壯的。除非你或其他人先做,否則我會把它寫成答案。 – 2009-12-18 01:47:53
@JF,嗯....仍然在思考,但我現在還不太確定。如果先前的ID爲1234的消息經過了接口,但是在發送端沒有引用,然後另一個消息得到了相同的ID()並且也被髮送,這次保留了引用,但是* first *消息然後回來,它會錯誤地匹配。跟着我? – 2009-12-18 01:50:25