我想在一小时的顶部开始一个函数,每小时(python)

时间:2016-02-11 16:18:29

标签: python python-2.7

我有一个函数hello_world ()我想每小时拨打一次(1:00,2:00,3:00等)。

我是初学者,对编写循环并不是很满意。

我有以下代码,但在23小时后停止。我不知道如何循环循环使得一切都在一天结束时重复!

def sched ():
    i = 0

    for  (i <= 23):
        x = datetime.today()
        current_hour = datetime.now().hour
        y=x.replace(day=x.day+1, hour=i, minute=00, second=00, microsecond=00)
        delta_t=y-x
        secs=delta_t.seconds+1
        t=Timer(secs, hello_world)
        t.start()
        i = i + 1

我也意识到这可能不是编写此代码的最有效方式,所以我愿意接受有关如何改进的建议。

2 个答案:

答案 0 :(得分:0)

这是因为您将循环限制为i <= 23。您可以将其更改为:

i = 0
while True:
    x = datetime.today()
    current_hour = datetime.now().hour
    y=x.replace(day=x.day+1, hour=i, minute=00, second=00, microsecond=00)
    delta_t=y-x
    secs=delta_t.seconds+1
    t=Timer(secs, hello_world)
    t.start()
    i = (i + 1) % 24

使用(i + 1) % 24 i永远不会超过23的保证人。有关模数运算符here的更多信息。

答案 1 :(得分:0)

你知道模运算符(%)吗? i%24将在除以24之后返回余数,因此我将为0,1,...... 23,0等等

def sched ():
    i = 0

    while True:
        x = datetime.today()
        current_hour = datetime.now().hour
        y=x.replace(day=x.day+1, hour=i, minute=00, second=00, microsecond=00)
        delta_t=y-x
        secs=delta_t.seconds+1
        t=Timer(secs, hello_world)
        t.start()
        i = i + 1
        i = i % 24