亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

每個星期一運行 Python 調度程序?

每個星期一運行 Python 調度程序?

慕雪6442864 2023-06-20 14:43:42
我每周一上午 10:00 運行調度程序。這是代碼:import scheduleimport timeschedule.every().monday.at("10:00").do(job)while 1:    schedule.run_pending()    time.sleep(1)我的問題是 time.sleep() 的值應該是 7days = 604800 秒還是保持 1 秒?有人可以提供一個很好的例子并說明 time.sleep() 如何影響程序的執行,在這種情況下哪種方式更好:睡眠 1 秒或 604800 秒。提前致謝。
查看完整描述

1 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

schedule.run_pending()簡單地循環運行所有到期的作業。帶有睡眠的循環決定檢查作業的頻率,定義作業何時運行的最小粒度。


每秒輪詢一次是不禮貌的。除非 CPU 無論如何都是空閑的,否則每次輪詢都會中斷一些其他任務,刷新內存緩存并通常增加宇宙的熵。您可以通過更改睡眠來設置不同的粒度。在此示例中,作業每 10 分鐘檢查一次。所以它可能在 10:10 而不是 10:00 運行。這可能很好,而且您中斷系統的次數減少了 600 次。每小時輪詢一次對于您的任務也可能是合理的。


JOB_GRANULARITY_SECONDS = 60 * 10


while True:

    schedule.run_pending()

    time.sleep(JOB_GRANULARITY_SECONDS)

但是當工作之間有很大的差距時,為什么不直接計算出確切的睡覺時間呢?您可以獲得下一份工作的時間并睡那么多時間(也許有一個軟糖因素來處理微小的波動,例如時鐘的粒度和時間協議在一些額外時間中的折騰)。此示例具有 2 秒的捏造粒度。


while True:

    schedule.run_pending()

    next_run_delta = (schedule.next_run - datetime.datetime.now()).total_seconds()

    if next_run_delta <= 0:

        continue

    time.sleep(next_run_delta + 2)

您還可以添加異常處理,以應對一切都崩潰的情況


while True:

    try:

        schedule.run_pending()

    except Exception as e:

        my_alert_fctn(f"Scheduler failed, {e}") # email maybe?

    next_run_delta = (schedule.next_run - datetime.datetime.now()).total_seconds()

    if next_run_delta < 0:

        continue

    time.sleep(next_run_delta + 2)


查看完整回答
反對 回復 2023-06-20
  • 1 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號