2011-08-08 66 views
4

我已經讓我的Django項目運行良好,並有一個單獨的後臺進程,它將從各種來源收集數據並將該數據存儲在索引中。Django,信號和另一個過程

我在Django應用程序中有一個名爲Sources的模型,它基本上包含數據可以來自的源的列表!我已經成功設法創建了一個信號,在Sources模型中放入一個新條目時激活/調用該信號。

我的問題是,是否有一個簡單的方法,任何人都知道,我可以發送某種形式的信號/消息到我的後臺進程,指示Sources型號已更改?或者我應該只是每次x秒採用輪詢方式進行更改,因爲它是,所以要簡單得多嗎?

非常感謝您收到的任何幫助。

+0

,我不認爲你給我們介紹一下後臺進程足夠的信息。他們是什麼?通過Python'multiprocessing'運行的東西? – agf

+0

對不起 - 後臺進程是完全獨立的。由另一個命令在終端中啓動。 –

回答

5

目前還不清楚你如何運行你正在談論的後臺進程。

無論如何,我建議你在後臺任務中直接使用Sources模型。有很方便的方法可以在不離開Django領域的情況下運行任務(以便訪問你的模型,例如你可以使用Celery [1]或者RQ [2]。

然後你不會需要通過任何消息,Sources模型的任何更改將在您的任務運行的下一次生效。

[1]芹菜是一個開源的異步任務隊列/作業隊列,它不難設置和使用Django很好地結合。

[2] RQ的意思是「Redis隊列」,它是一個簡單的Python庫,用於排隊工作並在後臺使用工作進程處理它們。

+0

太棒了,我想我會給芹菜一個去。非常感謝您的回覆! –

1

如果您不需要瞬間的延遲,輪詢可能是最容易的。

如果你這樣做,但是,那麼你可能要考慮兩種,也就是說,

  • 發送UNIX信號(或IPC的其他方法,這取決於平臺)的過程
  • 後臺進程擁有一個簡單的監聽套接字,您只需發送一個字節(無可否認,這是一種IPC形式),並觸發您想要觸發的操作或某種類型的任務/消息隊列。想起了CeleryZeroMQ