我试图每隔一分钟向API发送一次查询,因为API每分钟都会更新其数据,因此我希望立即更新数据。时间要非常精确,这一点很重要,我想最后连续运行所有内容。
这正是我要尝试执行的操作:
forEach
我应该这样做吗,还是有一种甚至更聪明的方法,每隔一分钟精确地从REST Api获取数据?
答案 0 :(得分:2)
您可以使用asyncio.sleep
对于Python <3.7
import asyncio
def get_data():
print("Getting data")
async def main():
while true:
get_data()
await asyncio.wait(MINUTE)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
对于Python 3.7 +
import asyncio
def get_data():
print("Getting data")
async def main():
while true:
get_data()
await asyncio.wait(60)
#This is the only thing that changes
asyncio.run(main)
修改
根据您的评论,如果您真的担心要确保每60秒调用一次。
您可以采用一种方法来花费时间来调用get_data
并将其从60中减去,只需要确保get_data
是否确实花费了60秒才能等待0秒或根本不等待
您的main()
这样的事情应该起作用:
#make sure to:
import time
async def main():
while true:
t = time.time()
get_data()
time_diff = int(time.time() - t)
await asyncio.wait(max(60 - time_diff, 0))
答案 1 :(得分:0)
感谢大家的帮助。
This Answer最后为我工作得很好:
import time
starttime = time.time()
while True:
print(time.time())
time.sleep(60.0 - ((time.time() - starttime) % 60.0))
我让它整夜运转,没有加班。无论执行循环中的代码需要花费多长时间,两次执行之间的时间正好是60。