2013-03-26 57 views
1

我們有大約10種不同的Python腳本,它們可以從網上下載數據,從數據庫讀取數據並將數據寫回到該數據庫。他們每10秒鐘重複一次(或最後一次任務完成後的10秒鐘)。重複的任務 - 產生新的進程或連續運行?

問題是,運行這些任務的最佳方法是什麼?我可以想到幾種方法:

  1. a while True運行任務,然後睡眠的時間間隔。它可以像supervisord這樣的監管機構來保護,確保它始終保持正常運轉。

  2. 使腳本只執行一次任務,並且每隔10秒由另一個進程從外部調用該腳本。

  3. 讓腳本執行任務讓我們說1小時(每10秒鐘一小時),然後讓看門狗確保任務在小時結束後再次運行。

我想,以避免長時間運行的進程,實際上做一些事情,因爲我不想處理過的很長一段時間內存問題等。

附加資料

  1. 的腳本是不同的,因爲它們每一個檢索來自不同的源的數據,並且查詢,計算和不同的數據插入到數據庫中。

  2. 由於被檢索的數據是實時的,因此每10秒執行一次任務,我們不僅需要非常頻繁地更新它,而且還要將所有歷史數據保存在數據庫中。

  3. 腳本中使用了很多資源--MySQL連接,HTTP連接,Redis連接等。我們遇到過使用長時間運行的方法的問題,特別是與MySQL連接有關的問題(比如MySQL服務器已經消失,即使所有連接都已關閉)。因此傾向於讓腳本在較短的時間內運行。

這是什麼常見的方法?

回答

0

除非你的腳本以某種方式泄漏內存(不太可能),它們應該都是相同的。所以,純粹簡單(你的時間編程/調試比機器幾個毫秒的時間要貴得多,甚至每10秒鐘一次!)我會選擇每10秒檢查一次的腳本。

OTOH,每10秒檢查一次聽起來像是忙碌。難道你不能設置,以便無論你正在監測什麼時候有變化,告訴你什麼?或者將記錄批量上傳,以便在某個時間檢索一天的價值?

+0

請參閱我的編輯,謝謝! – user1094786 2013-03-26 23:08:36

0

如果您在linux上運行,cron具有一分鐘的粒度。我們有不斷運行的流程。而不是看它們,腳本會打開一個信號量,當程序正常結束或沒有結束時會被釋放。這種方式如果它運行時間很長,並且被cron再次調用,那麼拷貝將在無法獲得鎖定時退出。這樣,您可以根據需要經常調用它,而不必踩在可能仍在運行的副本上。