[英]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.