如何在python中为GET请求添加轮询间隔

Posted

技术标签:

【中文标题】如何在python中为GET请求添加轮询间隔【英文标题】:How to add polling interval for a GET request in python 【发布时间】:2021-05-23 18:43:14 【问题描述】:

我有一个案例,我必须不断检查 GET 调用的响应,直到我在 api 响应中看到 statussuccess。从activesuccess 的状态大约需要 20 到 50 分钟。只有当我看到此状态时,我才能执行其他操作。

如何在 python 中实现这一点?

我试过这个polling python 库。但这并没有多大帮助。

这是我的代码。但这不是我想要的。有没有其他方法可以做到这一点?

    try:
        while True:
            response = requests.get(f'os.environ["BASE_URL"]/syncs/076532', headers=headers)
            json_res = response.json()
            if json_res.get('status') != 'success':
                logging.info("Polling started.......")
                logging.info("Waiting.......")
                time.sleep(120)
            print("Got status as success. Proceeding......")
            sys.exit()
    except KeyboardInterrupt:
        logging.info("exiting")
        sys.exit()

提前致谢

【问题讨论】:

它应该做什么不做什么?你可以有几个 except 块来处理不同的异常(例如没有 JSON 响应或超时) 哦,当您成功阅读时,您想breakreturn 然后继续您的while 循环(这样会发出 new 请求每次迭代,而不是目前只有一个..这可以通过continue在睡眠后修复)..看看文档break and continue Statements, and else Clauses on Loops 【参考方案1】:

你可以试试这个:

def custom_request(url: str, headers: dict):
if requests.get(url=url, headers=headers).json().get('status') != 'success':
    logging.info("Polling started.......")
    logging.info("Waiting.......")
    return False
return True


def main():
try:
    polling.poll(
        custom_request,
        step=60,
        args=(f'os.environ["BASE_URL"]/syncs/076532', headers),
        poll_forever=True
    )
    print("Got status as success. Proceeding......")
    exit()
except KeyboardInterrupt:
    logging.info("exiting")
    exit()

您在使用投票时遇到了哪些困难?

【讨论】:

我得到了答案。我的回答来源于你的回答。它与给出的并不完全相同。但它与它相似。

以上是关于如何在python中为GET请求添加轮询间隔的主要内容,如果未能解决你的问题,请参考以下文章

轮询直到得到具体结果?

怎样在collectionView头部添加轮播图,要求能随collectionView滚动

在 Textview 中添加轮播视图

使用谷歌地图在jquery mobile中添加轮播

如何在 Truffle 中配置不同的轮询间隔?

如何异步运行长时间运行的操作并在 ASP.Net Ajax 中为用户显示加载并轮询结果?