2016-05-30 14 views
0

以下は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を使用しています。前もって感謝します。

答えて

1

これは間違ったアプローチです。セロリの全体のポイントは、長時間実行されるタスクをオフロードして、応答を遅らせることではありません。

代わりに、すぐに保留応答を返し、おそらく別のビューからステータスを要求するために、フロントエンド(おそらくAjax経由)を取得する必要があります。

+0

うん、私はセラーで働くためにajax呼び出しを使用しましたが、これはうまくいきました。しかし、誰かがHTML/JSソースコードを使ってapi URLに近づくことができるため、セキュリティ上の問題が心配です。これが私がこのサーバー側チェックを思いついた理由です。もちろん、上記のビュー関数はajax呼び出し用です。 – Leonard2

+1

あなたのコードがセキュリティ上の懸念にどのように対応しているかは、実際には分かりません。 ajax呼び出しはURL経由でビューを要求し、サーバー側(login_required、permissionなど)で認証チェックを行うことができます。ダニエルの提案によれば、定期的にajaxでチェックすることができます。コメントのために@ – keni

+0

@keniありがとう。私はそのようなことに関わっていました。このマシンはクライアントに対して応答する必要があるため、セロリを備えたマシンはCORSヘッダーのすべてのドメインを許可する必要がありました。だから私は、繰り返しのAjaxリクエストでマシンに悪質な負荷を与えるかもしれない人が心配していました。私は認証のためのサーバー側のチェックを見ていきます! – Leonard2

-1

答えとコメントの後、ありがたいことに、後で使用するための記録を残します。

ダニエルの答えによれば、セロリの使用は、サーバーによる一部のコンピューティング中に待つことではありません。したがって、フロントエンドが投げてセロリの作業をチェックするのは当然です。

JavaScriptのURLの公開はセキュリティ上の問題ではありません。 This SO postthatによれば、私はapi urlを1つのWebページのURLとみなすことができます。これは一般に知られており、多くのリクエストはサーバーに負担をかけません。

私の場合、メインWebサービスとコンピューティング用の2つのサーバーがそれぞれ分離されているので、CORSヘッダーを構成する必要があります。 This SO postは、ホストと異なるドメインに対してajaxを呼び出すと、jQueryは適切なヘッダーを設定しないので、request.is_ajax()は機能しません。 ajaxコードのcrossDomain: falseはこの問題を解決します。

私はまだサーバーサイドのセキュリティを探しています...ケニが言ったように、Thisが役に立ちます。

私の質問は私の懸念事項を非常にうまくまとめていないと思うので、ここでやりたかったのです。任意のヒントは歓迎されます。

関連する問題