python - 如何安排函数在每个月的最后一天运行?

时间:2010-12-28 10:38:27

标签: python

我想使用python sched安排函数在每个月的最后一天运行。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

每天使用crontab运行并使用calendar.monthrange检查它是否是该月的最后一天:

 import datetime, calendar
 today = datetime.date.today()
 if calendar.monthrange(today.year, today.month)[1] != today.day:
     exit()

Python sched和crontab不属于同一个联盟,除非你在谈论另一个python sched。 Windows有一个类似的scheduller,或者你可以安装cygwin crontab。

如果你在一个缺乏系统范围任务调度程序的奇怪平台上,你可以留下一个运行上述测试的无限循环和time.sleep(24 * 60 * 60)秒或类似的东西。

答案 1 :(得分:1)

该月的最后一天有一个属性,即下一个日期的值小于当前日期。

了解从当天到当天结束的天数。使用上面列出的属性作为线索。使用datetime模块查找详细信息。

  1. 编写一个函数def mydaycount():,该函数以当前日期的0开头,并且每个后续日期都会产生更高的值。这与您的time.time()调用相似,但每天都是

  2. 写一个函数def mydaydelay(num):它会睡一天。

  3. 现在,重要的部分是

    class sched.scheduler(timefunc, delayfunc)
    

    timefunc可以是任何函数,当被调用时返回一个值,在你的情况下,它将是mydaycount,delayfunc将是mydaydelay

    然后你可以使用行动作为你的行动作为你的行动作为你的行动作为你的行动作为你的行动的日期来调用被调查的对象。

    scheduler.enterabs(time, priority, action, argument)
    

    您的计划的粗略轮廓将是这样的。

    import sched
    import datetime
    
    def mydaycount():
        yield int_days
    
    def mydaydelay(n):
        sleep_for_days(n)
    
    scheduler = sched.scheduler(mydaycount, mydaydelay)
    
    def print_event(name):
        print 'EVENT:', name
    
    n_days_to_last_day = 3 # This should be your calculate value
    
    scheduler.entertabs(n_days_to_last_day, 1, print_event, ('last day',))
    
    scheduler.run()