多くのオプションがあります。Celery または Twisted を使用して、独自のソリューションを開発できます (既に作成されているオプションが他にもあると思いますが、それらは最も一般的なものです)。
社内ソリューションの開発は難しくありません。multiprocessing
Python 標準ライブラリのモジュールを使用できます。
- タスクが到着したら、タスク ID とステータスを含む行をデータベースに挿入します。
- 次に、終了時に行ステータスを更新する作業を実行するプロセスを起動します。
- タスクが終了したかどうかを確認するビューを使用できます。これは、実際には対応するステータスを確認するだけです。
もちろん、計算の結果をどこに保存したいか、エラーが発生した場合はどうなるかを考える必要があります。
セロリと一緒に行くのも簡単です。次のようになります。非同期で実行される関数を定義するには:
@celery.task
def mytask(data):
... do a lot of work ...
次に、 のようにタスクを直接呼び出す代わりに、mytask(data)
すぐに実行するdelay
メソッドを使用します。
result = mytask.delay(mydata)
最後に、結果が利用可能かどうかを次の方法で確認できますready
。
result.ready()
ただし、Celery を使用するには、外部ワーカープロセスを実行する必要があることに注意してください。
私は Twisted を見たことがないので、これよりも複雑かどうかはわかりません (ただし、やりたいことを実行しても問題ないはずです)。
いずれにせよ、これらのソリューションはどれも Flask で正常に機能するはずです。結果を確認するには、Javascript を使用するかどうかはまったく問題ではありません。ステータスをチェックするビューが JSON を返すようにするだけです (Flask の を使用できますjsonify
)。