2011-09-14 43 views
0

在Python中使用datetime調用函數的一種好方法是什麼?在Python中使用datetime調用函數

有3種方式,我知道:

  1. 「我們到了沒?」 (檢查日期是否已經過間隔(time.sleep(interval)))
    這顯然是不好的。如果時間間隔很低,這隻能是精確的,這會變得效率低下。

  2. 睡眠斷差(time.sleep(timedelta.seconds)
    這是好,但我不喜歡把一個線程睡眠出奇長的時間,例如的想法如果是這樣的日期,則爲6個月。

  3. 上述兩者之間的混合;如果區別在於波動間隔,則休息一下。如果在上面,睡一段時間以防止長時間睡眠。
    我認爲這是所有三種中最好的,當你考慮長時間睡眠時,但間隔時間似乎不好。

還有什麼方法可以想到嗎?標準庫中有什麼可以幫助我在日期時間後面的場景調用一個函數?

編輯:
我在問這是因爲我實際上在Python中開發了自己的Cron實現。唯一的問題是我無法決定我的代碼應該等待下一次發生。我的實現和原始Cron之間的差異之一是支持秒。所以,只需要儘可能小的間隔(在我的情況下是1秒)睡眠效率太低。

我現在意識到,這個問題也許可以改爲「克朗如何做到這一點?」即「Cron如何檢查是否有任何日期已經過去?它會不斷運行還是每分鐘運行一次?」。我認爲後者就是這種情況,如果間隔爲1秒,這又是低效的。
另一個區別是,我的代碼讀取一次crontab並從模式計算下一次出現的確切日期(日期時間對象)。雖然我認爲Cron只是簡單地檢查crontab中的任何模式是否與當前時間匹配。

如果沒有其他方法可以做到這一點,我會堅持「混合」方式。

+1

我認爲你問的是錯誤的問題。如果不知道自己的最終目標,不可能告訴你做什麼最好的方法,因爲根據目標是什麼,它可能會有很大的不同。 –

+0

@Jan我明白了。我已經更新了這個問題。 – Rainbow

回答

1

如果這可能是像你說的那樣可能是六個月的事情,一個時間工作可能比保持一個python程序一直運行更合適。

0

我使用gobject主循環,但任何帶有事件循環的庫都應該具備這種能力。

0

使用cron作業可能是個好主意。

您可以編輯cron表:crontab -e命令 並添加這樣一行(稱爲每20分鐘)

*/20 * * * *的/ usr/bin中/蟒蛇/家庭/ TOTO/my_script.py