2012-12-21 17 views
2

由於某些要求,我一直在管理一個使用multiprocessing.manager的程序,但是我們一直在收到穩定數量的錯誤,例如超時,無效的引用和其他類似的錯誤。Python中的multiprocessing.manager的替代方案

現在我很好奇,是否有更多的開發替代multiprocessing.manager,具有更好的整體可靠性和更少的客戶端狀態跟蹤。

我試過谷歌的主題,但由於關鍵字的奇怪組合,我只收到假結果。

我們通常使用的情況與此類似:

def connect(): 
    manager = CustomManager(address=manager_address, authkey=manager_authkey) 
    manager.connect() 
    session = manager.session() 
    return session 

connect().some_function() 
+3

你有任何可以重現這些錯誤的代碼。也許可以對經理進行壓力測試。進行進程間通信有很多方法,所以我只想知道哪些場景會給你提供這些問題。 –

+0

@MarwanAlsabbagh添加了我們用來連接的代碼片段以及我們經常使用管理器的方式。 – Wessie

+1

我認爲@MarwanAlsabbagh的意思是這個問題太模糊。什麼是需要的具體功能,以及遇到的實際錯誤是什麼? multiprocessing.manager有幾種選擇,但它們是多種多樣的,它們的匹配取決於您的特定需求。我對上述的經驗是,如果你經常使用這些函數,mp管理器可以初始化本地代理對象(例如Queue,Dict等),但是對於功能主機來說太慢了(比如在你的例子中)。 –

回答

2

對這個問題和你的意見來看,如果你想要的東西更堅實的管理流程有使用多模塊更好的替代品。以下是你可能會想探索兩種選擇:

的Gearman

這是Gearman項目的描述。

的Gearman提供了一個通用的應用程序框架的工作外包給 是更適合做這項工作的其他機器或流程

Instagram的具有用Python編寫的工人和使用的Gearman在運行這些作業的背景。你可以在What Powers Instagram的帖子的任務隊列部分閱讀它。

芹菜:分佈式任務隊列

Celery是基於分佈式消息傳遞一個異步任務隊列,它聚焦在實時操作。它在Django社區非常流行。

這兩種解決方案都具有很強的可擴展性和廣泛的用途,因此您將找到大量關於如何使用它們的文檔和教程。他們更多地參與其中,因此會有更多的初始學習曲線。但是,如果您達到多處理的極限,我認爲可能值得花時間進行投資。