使用python

时间:2019-03-18 19:14:53

标签: python datetime

我正在尝试让某个功能在特定时间运行一次。我使用过以下代码:

import pytz
import datetime
import time

def test_1():

    print("Working_1")


def test_2():

    print("Working_2")


while True:

    current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')

    if current_time == '2019-03-18T19:00:36Z':

        test_1()

        current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')


        if current_time > '2019-03-18T19:00:36Z':

            break

        if current_time == '2019-03-18T19:00:36Z':

            test_2()


            current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')


            if current_time > '2019-03-18T19:00:36Z':

                break

当我运行代码时,它将运行第一个函数,然后运行第二个函数,直到结束条件为止。

我希望函数在if语句中的指定时间运行。

我认为问题在于循环如何嵌套。我已经尝试过if语句的多种配置和中断条件,但无法获取。

任何帮助将不胜感激,欢呼。 桑迪

2 个答案:

答案 0 :(得分:2)

我相信您的代码在这里行不通,因为它将需要时间完全是给定的时间戳,并且考虑到运行时,即使是最小的时间,这也是不现实的。一种可能的解决方案是提供“时间缓冲”,即围绕执行时间的窗口,而不是if语句的完全匹配;但是,这仍然非常不可靠。

如果您不介意使用外部模块,建议您看看schedAPScheduler。我亲自使用了后者,效果很好。

答案 1 :(得分:1)

对您想要的内容进行最佳猜测:您希望这两个功能在特定时间按顺序运行,是吗?更简单的方法应该起作用,例如:

current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
while current_time < '2019-03-18T19:00:36Z':
    current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
test_1()
test_2()

一旦时钟达到或超过您的目标时间,它将立即运行这两个功能。

编辑:如果您希望它们在两个不同的时间运行:

current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
while current_time < '<first_time>':
    current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
test_1()
while current_time < '<second_time>':
    current_time = datetime.datetime.now(pytz.timezone('GMT')).strftime('%Y-%m-%dT%H:%M:%SZ')
test_2()

(其中<first_time>首先按时间顺序排列)