schedule(Python lib) - 如何在多个特定的分钟内运行作业

问题描述 投票:2回答:1

我正在使用schedule库来安排Python脚本。

我想要实现的是每小时上下运行的工作(即...... 10:00,10:30,11:00 ......)。

我试过以下内容:

  • 当我将它用作schedule.every(30).minutes.do(job)时,作业开始的时间取决于程序何时启动(如果它在10:17运行,它将在10:47,11:17等运行),这不是我需要的。
  • 还提供了schedule.every().hour.at(":30").do(job)方法,但它不跨越:00s。

因此,我寻求一种惯用的,或者至少是一种利用这个库来实现它的方法。有吗?

python schedule
1个回答
2
投票

一种方法是终止上一个计划流程并以新的时间开始新计划流程。为了指定下一次,我实现了一个不那么整洁的功能。

import schedule

# an arbitrary start time
start = '11:30'


def next_time(start):
    ''' This function gives the next time. eg '13:00'->'13:30', '24:30'->'01:00' '''
    comp = start.split(':')
    if '30' in comp[1]:
        comp[1] = '00'
        comp[0] = str(int(comp[0]) + 1)
    else:
        comp[1] = '30'
    if int(comp[0]) > 24:
        comp[0] = '01'
    return ':'.join(comp)


def job(time_now):
    print("The job has been done!")
    # kill the previous schedule, specified with a tag
    schedule.clear('previous')
    # the new time is calculated by next_time function
    next_point = next_time(time_now)
    # return a new one with the new time for the scheduled job
    return schedule.every().day.at(next_point).do(job, next_point).tag('previous')


# implementing the schedule for first time
schedule.every().day.at(start).do(job, start).tag('previous')


while True:
    schedule.run_pending()
    time.sleep(1)
© www.soinside.com 2019 - 2024. All rights reserved.