2

DjangoでWebサービス(RESTful API)を作成しています。APIは、独自の内部データと、Webサービスレイヤーがアクセスする他のAPIの両方をラップします。

私たちが使用しているAPIの1つには、1分程度のHTTP応答を返さない長時間実行の呼び出しがあります。APIには、現在の操作のステータスを取得するための個別のAPI呼び出しがありますが、これは、ユーザーが長時間実行操作を開始してから、ステータスについて個別のプロセスポーリングを行う必要があることを意味します。APIがそのように機能することは望ましくありません。最初のリクエストは、進行中であることを示す応答を返すだけです。

したがって、実行時間の長いリクエストを受け取ったときに、APIへの独自のHTTPリクエストを非同期的に開始し、応答を返します。次に、ステータスポーリングを取得するたびに、それを通過させて、取得した応答で応答します。操作が完了したというコールバックを受け取ったら、次にステータスポーリングを取得したときに、操作が完了したことを応答してデータを返します。これは、ステータスで応答するために進行中の長時間実行リクエストのリストをチェックするために、着信ステータスリクエストのハンドラーが必要になることを意味します。

これはこれにアプローチするための合理的な方法のように思われますか?この種のことを簡単にするために、どのPythonライブラリを調べる必要がありますか?イベントレットやツイストのような低レベルのものを使うのか、セロリのような少し重いものを使うのかはわかりません。セロリはこの種のものの通常の推奨事項のようですが、私はその場所が何であるかを100%確信していません。

ありがとう、スペンサー

4

1 に答える 1

0

私は数か月前に同じ状況に直面しました。おそらくあなたはすでに問題を解決していますが、同じ状況に直面している他の人のために、その時に私がしたことを投稿します.

基本的に私はhttp://www.celeryproject.org/ライブラリを使用し、成功した HTTP 応答であるセロリ ジョブ ID を返す長時間実行オペレーションを非同期的にディスパッチし、非同期オペレーションはステータスとジョブ ID を sqlite データベースに登録します (私がしていたことには十分でした)、クライアントは(restを使用して)ジョブのステータスを照会していました。

于 2016-11-28T21:48:54.390 に答える