簡體   English   中英

Python:按計划運行函數而不重疊某些執行

[英]Python: run functions on a schedule without overlapping some execution

我一直在使用schedule模塊嘗試在我的 python 代碼中安排功能,但我認為我的用例超出了它的能力。

目前我有 4 個功能,我想按設定的時間表運行。 我想每小時運行一次 function_1,交替運行 function_2 和 function_3,每周運行一次 function_4。

我目前的工作安排如下:

schedule.every(1).hours.do(function_1)
schedule.every(2).hours.do(function_2)
schedule.every(3).hours.do(function_3)
schedule.every().monday.do(function_4_setup)

def function_4_setup()
    logger.debug("Clearing Schedule to run function_4 on its own")
    schedule.clear()
    sleep(3600)
    function_4()
    logger.debug("Restarting All Jobs")
    recreate_jobs() # re-adds function 1-3 to schedule

問題是這段代碼將導致 function_2 和 function_3 在 12 小時、18 小時和 24 小時后同時運行或立即運行,這是我想避免的。

給你一個我期待的行為的例子:

  • 00:00:function_1 和 function_2 運行
  • 01:00:function_1 和 function_3 運行
  • 02:00:function_1 和 function_2 運行
  • 03:00:function_1 和 function_3 運行

... 1 周后...

  • 00:00 function_4 運行
  • 01:00 function_1 & function_2 運行

我已經查看了APScheduler ,但該庫似乎也不適合我的用例。 任何建議/幫助將不勝感激!

我建議不要單獨安排 function 2 和 3 ,而是制作一個 function 來觸發 2 個函數,而是每小時運行一次。 例如:

boolean = True

def flip_funcs():
    global boolean
    boolean = not boolean
    [function_2, function_3][boolean]()

schedule.every(1).hours.do(flip_funcs)
    

您可以嘗試使用simple_scheduler 它允許更高程度的控制。

from simple_scheduler.event import event_scheduler
event_scheduler.timezones()
TZ = "Asia/Kolkata"
WHEN_1 = [f"*|0{h}:00" if h//10 == 0 else f"*|{h}:00" for h in range(0,24)]
WHEN_2 = [f"*|0{h}:00" if h//10 == 0 else f"*|{h}:00" for h in range(0,24,2)]
WHEN_3 = [f"*|0{h}:00" if h//10 == 0 else f"*|{h}:00" for h in range(1,24,2)]
event_scheduler.add_job(target = function_1, when = WHEN_1, tz = TZ)
event_scheduler.add_job(target = function_2, when = WHEN_2, tz = TZ)
event_scheduler.add_job(target = function_3, when = WHEN_3, tz = TZ)
event_scheduler.add_job(target = function_4_setup, when=["mon|00:00"], tz=TZ)

def function_4_setup():
    event_scheduler.clear()
    sleep(3600)
    function_4()
    recreate_jobs()

您是否嘗試過在 function 上進行多線程處理? https://www.tutorialspoint.com/python/python_multithreading.htm這可能是您正在尋找的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM