我正在尝试让某个功能在特定时间运行一次。我使用过以下代码:
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
语句的多种配置和中断条件,但无法获取。
任何帮助将不胜感激,欢呼。 桑迪
答案 0 :(得分:2)
我相信您的代码在这里行不通,因为它将需要时间完全是给定的时间戳,并且考虑到运行时,即使是最小的时间,这也是不现实的。一种可能的解决方案是提供“时间缓冲”,即围绕执行时间的窗口,而不是if语句的完全匹配;但是,这仍然非常不可靠。
如果您不介意使用外部模块,建议您看看sched或APScheduler。我亲自使用了后者,效果很好。
答案 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>
首先按时间顺序排列)