ユーザーがファイルをアップロードできるようにするDjangoアプリケーションに取り組んでいます。これらのファイルをAmazonS3に送信する前に、これらのファイルに対してサーバー側の処理を実行する必要があります。この質問とこのブログ投稿への回答を読んだ後、これを処理する最善の方法は、ビューハンドラーにPyroリモートオブジェクトのメソッドを呼び出して非同期で処理を実行させ、すぐにHttp200をクライアントに返すことであると判断しました。 。私はこれのプロトタイプを作成しましたが、うまく機能しているようですが、クライアントがアプリケーションをポーリングしてファイルが処理されてS3にアップロードされたかどうかを確認できるように、処理の状態も保存したいと思います。
ポーリングは簡単に処理できますが、プロセス状態を格納する適切な場所がわかりません。Pyroプロセスで書き込み可能で、ポーリングビューで読み取り可能である必要があります。
- 私は、実際には30〜60秒間しか持続しないはずのデータの列をデータベースに追加することを躊躇しています。
- Djangoの低レベルキャッシュAPIを使用し、ファイルIDをキーとして使用することを検討しましたが、これが実際にキャッシュフレームワークが設計されているものであるとは思わず、予期しない問題が発生する可能性があるかどうかはわかりません。このルート。
- 最後に、処理を行うPyroオブジェクトに状態を格納することを検討しましたが、それでも、ビューがPyroオブジェクトから状態をクエリするかどうかを認識できるように、ブール値の「processing_complete」データベース列を追加する必要があるようです。
もちろん、データベースからの状態の分離には、データの整合性に関する懸念もあります(サーバーがダウンし、このすべてのデータがメモリ内にある場合はどうなりますか?)。経験豊富なWebアプリケーション開発者がこの種のステートフル処理をどのように処理するかを聞いています。