2016-06-17 15 views
0

私はPOST呼び出しを行うためにPythonでリクエストライブラリを使用しています。 POSTコールが完了するまでに約5分かかります。 S3バケットにファイルが作成されます。 その後、私はこのファイルをダウンロードしたいと思います。しかし、ファイルをダウンロードするコードの次の行を実行する前にPOSTが完了するのを待つ余分なロジックを作成する必要があります。POSTリクエスト(requests.post)がPythonで完了するのを待つ方法は?

提案がありますか?

これにサブプロセスライブラリを使用できますか?もしそうなら、構文はどのようになりますか?

コード:

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

実際にこれを試しましたか?期待どおりに動作するはずです。 – hichris123

答えて

0

質問によると、POSTリクエストには5分の時間がかかりますが、それは正しいとは限りません。おそらく、POSTリクエストがすぐに返されるかもしれませんが、サーバーはS3バケットのファイルを作成するのに5分間のグラインドを続けますか?その場合、遅延の必要性は意味をなさない。別々のダウンロードが必要であるという事実は、この解釈をサポートする傾向があります(要求された情報は要求自体から返されません)。失敗したダウンロードが例外をスローした場合

、これを試してみてください。DOWNLOAD_FILEは単に失敗した場合にFALSEを返した場合

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

または:質問の私の解釈は投機的であるので

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

、私はよポイントにならない場合は、この回答を削除してください。

+0

が正しいです。 POSTリクエストはすぐに返されますが、サーバーには何らかの処理があります。私はあなたの解決策を試みます。ありがとう! – GreenTeaTech

0

それが終了されるまでそれがすでに待機しなければなりません。

Pythonは、Node.jsと異なり、デフォルトでリクエストをブロックします。非同期に実行する場合は、別のスレッドで明示的に実行する必要があります。取り出しにPOSTリクエストが5分かかると、5分後にPOST要求が完了するまでダウンロード行は実行されません。

+1

これはコメントでなければなりません。なぜあなたはリクエストが完了するのを待つかを少し説明することができます。 –

+2

Pythonコードはデフォルトで非同期ではないので、 – Anonymous

関連する問題