如何在 Python 中等待 POST 请求 (requests.post) 完成?

新手上路,请多包涵

我正在使用 Python 中的请求库进行 POST 调用。我的 POST 调用大约需要 5 分钟才能完成。它将在 S3 存储桶中创建一个文件。之后,我想下载这个文件。但是,我需要创建一个额外的逻辑来等待我的 POST 完成,然后再执行代码的下一行以下载文件。

有什么建议么?

是否可以为此使用子流程库?如果是这样,语法将如何?

代码:

 import requets
r = requests.post(url)
# wait for the post call to finish
download_file(file_name)

原文由 GreenTeaTech 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

问题说 POST 请求需要 5 分钟返回,但也许这不太正确?也许 POST 请求立即返回,但服务器继续为 S3 存储桶创建文件需要 5 分钟?在那种情况下,延迟的需要是有道理的。完全需要单独下载的事实倾向于支持这种解释(请求的信息不会从请求本身返回)。

如果下载失败抛出异常,试试这个:

 import time
r = requests.post(url)
while True:
    time.sleep(60) # sixty second delay
    try:
        download_file(file_name)
        break
    except Error:
        print ("File not ready, trying again in one minute")

或者,如果 download_file 在失败时简单地返回 False:

 import time
r = requests.post(url)
while True:
    time.sleep(60) # sixty second delay
    if download_file(file_name):
        break
    print ("File not ready, trying again in one minute")

由于我对这个问题的解释是推测性的,如果不是重点,我会删除这个答案。

原文由 Juan Tomas 发布,翻译遵循 CC BY-SA 3.0 许可协议

它应该已经等到它完成了。

Python 与 Node.js 不同,默认情况下会阻止请求。如果您想异步运行它,则必须在另一个线程中显式运行它。如果您的 POST 请求需要 5 分钟来获取,那么下载行将不会运行,直到 5 分钟结束并且 POST 请求完成。

原文由 Michael Zhang 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题