簡體   English   中英

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

[英]How to wait for a POST request (requests.post) completion in Python?

我正在使用Python中的請求庫來進行POST調用。 我的POST通話大約需要5分鍾才能完成。 它將在S3存儲桶中創建一個文件。 之后,我要下載此文件。 但是,我需要創建一個額外的邏輯來等待我的POST完成,然后再執行代碼的下一行以下載文件。

有什么建議么?

可以使用子流程庫嗎? 如果是這樣,語法將如何?

碼:

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

它應該已經等到完成為止。

Python與Node.js不同,默認情況下將阻止請求。 如果要異步運行它,則必須在另一個線程中顯式運行它。 如果您的POST請求需要5分鍾才能提取,則下載行要等到5分鍾並且POST請求完成后才能運行。

問題是POST請求需要5分鍾才能返回,但這也許不太對嗎? 也許POST請求會立即返回,但是服務器繼續花5分鍾的時間為S3存儲桶創建文件? 在這種情況下,需要延遲是有道理的。 根本需要單獨下載的事實傾向於支持這種解釋(所請求的信息並非來自請求本身)。

如果下載失敗引發異常,請嘗試以下操作:

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")

由於我對這個問題的解釋是推測性的,因此,如果沒有意義,我將刪除此答案。

邁克爾的答案是正確的。 但是,如果您正在運行Selenium來爬網網頁,則前端JS需要一些時間來適當地呈現和顯示請求結果。 在這種情況下,我傾向於使用:

import time
time.sleep(5)

就是說,在這種情況下,您還有顯式隱式等待以及其他選擇。 看一下: Slenium等待文檔

如果您直接將請求發送到API,Python將等待響應,直到響應完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM