質問: 時間のかかる処理をwebアプリが稼働している裏で行う方法を教えてください。 Djangoでwebアプリを作っています。下記のような機能を実装したいのですが方法がわかりません。 例)サイトマップを自動で生成するwebアプリ 1.ユーザーが「example.comのサイトマップを作れ」とリクエストを送る。 2.サーバーは「リクエストを受け付けました」とレスポンスを返す 3.サイトマップの作成が終わるまで「処理を行っています」という表示を出しておく。 4.裏でexample.comというサイトをスクレイピングしてサイトマップを作る。 仮に、スクレイピングをしてサイトマップを作っていくとしたら膨大な時間がかかると思います。ですので、時間のかかるサイトマップ作成とサイトマップ作成依頼を受領したというレスポンスを切り分けたいと思っています。 また、そのようなリクエストが複数同時に来た場合に、リクエストが来た順に処理したいとも思っています。 自分で調べた限りではCRONの設定をして定期的にサイトマップ作成プログラムを動かすというのが一番近いような気がしますが、リクエストがきたら順次処理していくことを望んでいます。 宜しくお願いします。
回答: cron 云々と言われているので、OS は unix 系ということでよろしい? Django をよく知らないのですが、外部プロセスの実行は許されているんでしょうか? もし、許されているなら、at コマンドを使うのがお手軽です。 → Man page of AT at コマンドは、処理をキューイングしてくれます。 時刻の指定ができますが、その時刻に動く保証は無くて、指定された処理を順番に実行します。 例えば、重たい処理をするスクリプト heavy_script.sh があったとして、 ``` % echo "heavy_script.sh A" | at now % echo "heavy_script.sh B" | at now % echo "heavy_script.sh C" | at now ``` と、連続して at コマンドを実行しても、パラメータ A、B、C を渡した処理が順番に実行されます。