在特定时间戳上调用python函数

时间:2019-02-09 01:32:52

标签: python python-3.x api timestamp python-requests

我试图每隔一分钟向API发送一次查询,因为API每分钟都会更新其数据,因此我希望立即更新数据。时间要非常精确,这一点很重要,我想最后连续运行所有内容。

这正是我要尝试执行的操作:

forEach

我应该这样做吗,还是有一种甚至更聪明的方法,每隔一分钟精确地从REST Api获取数据?

2 个答案:

答案 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。