【问题标题】:Python: run functions on a schedule without overlapping some executionPython:按计划运行函数而不重叠某些执行
【发布时间】:2021-08-08 00:04:33
【问题描述】:

我一直在使用 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,但该库似乎也不适合我的用例。任何建议/帮助将不胜感激!

【问题讨论】:

    标签: python cron scheduled-tasks apscheduler


    【解决方案1】:

    我建议不要单独调度函数 2 和 3,而是创建一个函数来翻转这 2 个函数,而是每小时运行一次。例如:

    boolean = True
    
    def flip_funcs():
        global boolean
        boolean = not boolean
        [function_2, function_3][boolean]()
    
    schedule.every(1).hours.do(flip_funcs)
        
    

    【讨论】:

    • 感谢您的帮助!虽然不是最优雅的解决方案,但这实现了我的要求。关于如何扩展它以翻转超过 2 个函数的任何想法?
    • 不客气。对于超过 2 个,将所有函数添加到列表中,而不是布尔值,您可以使用 int 甚至生成器来循环执行。
    【解决方案2】:

    您是否尝试过对该函数进行多线程处理? https://www.tutorialspoint.com/python/python_multithreading.htm 这可能就是你要找的东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多