首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用扭曲的延迟和循环调用模拟crontab

使用扭曲的延迟和循环调用模拟crontab
EN

Stack Overflow用户
提问于 2013-01-29 17:57:10
回答 2查看 1.8K关注 0票数 0

我想用我扭曲的应用程序实现一个类似cron的行为。我想要触发一个周期性的调用(比如说每周),但是只在一个精确的时间运行,而不是在我启动应用程序的时候。

我的用例如下:我的python应用程序在一周中的任何时候启动。我希望通话时间是每周一早上8点但我不想执行活动等待(使用time.sleep()),我希望使用callLater在下周一触发调用,然后从该日期开始循环调用。

有什么想法/建议吗?谢谢,J。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-01 02:18:22

如果您非常喜欢cron风格的说明符,那么也可以考虑使用parse-crontab

那么你的代码看起来基本上是这样的:

代码语言:javascript
运行
复制
from crontab import CronTab
monday_morning = CronTab("0 8 * * 1")

def do_something():
    reactor.callLater(monday_morning.next(), do_something)
    # do whatever you want!

reactor.callLater(monday_morning.next(), do_something)
reactor.run()
票数 7
EN

Stack Overflow用户

发布于 2013-01-29 18:48:51

如果我正确理解了您的问题,您正在考虑的是计划任务的第一次执行,以及如何提供应用程序的初始启动时间。如果是这种情况,您只需要计算TimeDelta值(单位为秒)就可以传递给callLater。

代码语言:javascript
运行
复制
import datetime
from twisted.internet import reactor

def cron_entry():
    full_weekseconds = 7*24*60*60
    print "I was called at a specified time, now you can add looping task with a full weekseconds frequency"


def get_seconds_till_next_event(isoweekday,hour,minute,second):
    now = datetime.datetime.now()
    full_weekseconds = 7*24*60*60
    schedule_weekseconds = ((((isoweekday*24)+hour)*60+minute)*60+second)
    now_weekseconds=((((now.isoweekday()*24)+now.hour)*60+now.minute)*60+now.second)

    if schedule_weekseconds > now_weekseconds:
        return schedule_weekseconds - now_weekseconds
    else:
        return  now_weekseconds - schedule_weekseconds + full_weekseconds


initial_execution_timedelta = get_seconds_till_next_event(3,2,25,1)
"""
This gets a delta in seconds between now and next Wednesday -3, 02 hours, 25 minutes and 01 second
"""
reactor.callLater(initial_execution_timedelta,cron_entry)
reactor.run()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14580086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档