以下はdjangoビューで行いたいものです。 APIを介しdjangoビューのwhileループのtime.sleepの代わり
import requests, time
def SOME_VIEW_FOR_AJAX(request):
if request.is_ajax():
response = requests.get('API_URL_START_TASK')
# response is like {'ready':false, 'status':'PENDING'}
while not response['ready']:
response = requests.get('API_URL_CHECK_TASK')
time.sleep(1)
result = response.get()
# SOME MORE WORKS ...
(セロリは、他のPC上である)、このビューはセロリのタスクを開始し、常にタスクのステータスをチェックし、タスクが実行された場合、結果を取得します。
ここでは、time.sleep
の存在が懸念されます。 This SO POSTは、現在のスレッドを保持しているため、time.sleep
の使用は適切ではないことを示しています。 djangoビューを使用するためのtime.sleep
の置換えはありますか?またはそのような使用のためにtime.sleep
を使用することは許されていますか?
私はmod_wsgi、Windows Server 2012 R2でDjango 1.8.6、Apache 2.4を使用しています。前もって感謝します。
うん、私はセラーで働くためにajax呼び出しを使用しましたが、これはうまくいきました。しかし、誰かがHTML/JSソースコードを使ってapi URLに近づくことができるため、セキュリティ上の問題が心配です。これが私がこのサーバー側チェックを思いついた理由です。もちろん、上記のビュー関数はajax呼び出し用です。 – Leonard2
あなたのコードがセキュリティ上の懸念にどのように対応しているかは、実際には分かりません。 ajax呼び出しはURL経由でビューを要求し、サーバー側(login_required、permissionなど)で認証チェックを行うことができます。ダニエルの提案によれば、定期的にajaxでチェックすることができます。コメントのために@ – keni
@keniありがとう。私はそのようなことに関わっていました。このマシンはクライアントに対して応答する必要があるため、セロリを備えたマシンはCORSヘッダーのすべてのドメインを許可する必要がありました。だから私は、繰り返しのAjaxリクエストでマシンに悪質な負荷を与えるかもしれない人が心配していました。私は認証のためのサーバー側のチェックを見ていきます! – Leonard2