【问题标题】:How to add polling interval for a GET request in python如何在python中为GET请求添加轮询间隔
【发布时间】: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

标签: python rest python-requests polling


【解决方案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()

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

【讨论】:

  • 我得到了答案。我的回答来源于你的回答。它与给出的并不完全相同。但它与它相似。
猜你喜欢
  • 2022-01-11
  • 2018-08-04
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 2015-07-20
  • 2018-07-01
相关资源
最近更新 更多