2013-01-24 27 views
1

我有一個大的(超過600,000條記錄)數據庫作爲Django應用程序的一部分。該應用程序存儲從各種開放數據Web服務收集的信息。每隔一段時間(也許一週或更少),我需要檢查這些Web服務,以查看是否有任何數據已更新。如何管理一個長時間(幾天)的Python進程

我已經寫了一個python腳本來做到這一點。它可以工作,但速度非常慢,我經常在它完成之前得到這個錯誤:ConnectionError:[Errno 104]通過同級重置連接

基於一些實驗,我認爲這個過程需要幾天的時間才能完成。除了優化腳本之外,處理這種長時間運行的Python過程的最佳方式是什麼?

+0

您是否考慮讓數據庫本身知道數據何時更新,例如'timestamp'列?這將完全緩解在完成全表拉取操作後通過慢比較來檢查更新的需要,而不是僅僅詢問「自mm/dd/yyyy以來哪些行已經更新」 – hexparrot

+0

這是一個好主意,而且我有一個時間戳列。但是,它並不能幫助我第一次檢查數據集。 –

+0

嘗試使用單獨的腳本來訪問數據庫?如果你離開那個獨自工作一天的人,你可以避免這個問題。 –

回答

3

看看celery它應該很容易讓您爲多個工作者(也可以在不同的機器上運行)分配後臺作業。此外,它使您可以再次排隊工作,如果失敗並在稍後重試...

要優化你的腳本,你應該考慮使用多處理或使用異步庫,如gevent(特別是如果你有很多工作做得很好的I/O像調用Web服務),這使您能夠並行處理大量的同時連接(高達100s/1000s)。

+0

我會研究這兩個。我已經閱讀了一些關於它們的內容,但不知道我是否需要這麼重的東西。可能是。 –

+0

尤其是芹菜可以讓你把一個過程分成許多小的工作,可以單獨處理,獨立重試,當失敗時不要互相干擾。不要把它看作一個沉重的解決方案,你主要需要python celery包和一個隊列作業(也許你已經在使用redis了,那麼你可以使用它 - 如果你不想安裝獨立的消息隊列你也可以使用你的數據庫,特別是用於開發/測試) –

+0

我也在研究這個包,它看起來比芹菜簡單一些,可能是我需要的一切:http://huey.readthedocs.org/en/最新/ –

相關問題