2012-12-14 58 views
2

它很難解釋我想達到的目標。請耐心等待。如果您有任何問題,請告訴我。Django Signal vs Python Threading

說我有一個Django項目與兩個應用程序,我想他們耦合鬆散。其中一個應用程序是'Jobs',另一個是'Notifications'。

現在我想在Job實例更新時創建通知。所以,我正在考慮使用Django Signals。但我有一些保留是:

  1. 如果我使用內置信號像post_save。我可以驗證作業實例的條件並生成通知(這很好)。但問題出現的時候,在同一視圖邏輯中,我多次調用作業實例上的保存方法。這會多次生成通知。否則,我使用自制的信號,手動調用它,這對於鬆耦合是不利的。
  2. 此外,信號不是異步的,所以我必須等待通知生成完成後才能繼續。

任何人都可以請建議一個很好的使用信號的實施策略。我正在研究的一個解決方案是Python Threading,它似乎處理異步問題。但是使用線程是否還有其他後果?

+0

你看過芹菜嗎? –

+0

不是特別的,但我對AMQP有所瞭解。但我正在尋找一個相對簡單的解決方案。由於時間短缺。 –

+0

@ThomasOrozco:另外,我需要一臺服務器來維護我真正想要避免的代理 –

回答

1

我建議你在RabbitMQ中使用django-celery。您可以將通知事件添加到芹菜的任務中,讓您的視圖啓動任務隊列。看看....我希望它對你有幫助。

+0

是的,我做了一個重要的研究後我明白了,我發現AMQP是繼續前進的可擴展方式。雖然RabbitMQ是一種矯枉過正的行爲,但我可能會轉向Redis –

+0

是的...... Redis也非常好。但是關於Redis的文檔中有一個警告。因此正確測試。 –