2016-07-11 65 views
1

我想製作一個程序,每n秒輪詢一次SQL數據庫(n> 10)。它驗證特定列中的數據並根據它調用一個函數。Python:每隔n秒查詢一次SQL數據庫並根據它執行一個任務

對於例如,

when column has '1' -> call function1 
when column has '2' -> call function2 
when column has '3' -> exits 

我看着多線程,看見基礎上threading.timer的解決方案,將滿足我的使用情況?
此外,我會與時間漂移高達+/- 1秒。

回答

1

根據查詢的複雜性和您調用的函數可能不需要多個線程。如果你的查詢運行速度快,你的函數調用很便宜,那麼只需使用最簡單的解決方案來完成這項工作,即循環執行輪詢,調用你的函數,然後休眠剩下的時間。
如果你想每10秒調用一次,你的查詢花了1秒,函數調用花了1秒,然後睡了8秒,所以你的時間漂移​​不會隨着時間的推移而增長。

+0

我想這是一個可行的解決方案。但我不認爲我能夠計算隨着數據庫規模的增長,時間複雜度將如何增長。此外,數據庫位於服務器上,因此多個進程可能在任何給定時間進行輪詢,因此查詢時間可能不一致。 此外,多線程將爲我提供在線程運行時執行其他任務的功能,不是嗎? – ChaoticTwist

+0

如果您知道數據庫的大小會增長,並且您每隔幾秒就會執行一次相同的查詢,那麼您最好使用索引對其進行優化並保持不變,以隱藏併發性問題。除此之外,在我們的業務中,10秒的時間相當長,所以應該足以讓查詢運行。是的,它可以讓你做其他的事情,但是如果東西在10秒後還沒有完成,會發生什麼? - 再次產生一個新線程,然後再次產生,直到機器資源不足?當然,你可以使用多個線程,但是隻有在必要時纔會這樣做,因爲它會增加複雜性 – DAXaholic

+0

那麼,有沒有一種方法可以執行其他任務,如果我遵循解決方案(即不使用線程)? – ChaoticTwist