Djangoで時間のかかる処理をキューイングして逃げる方法 の準備

この前書いたスレッドの方法は、うまく動いている。しかし、この方法にはまだいくつか問題がある。

1.重い処理の重複
 もしスレッドに登録した方法がDisk I/Oをガリガリしていると、マシンの全体的なパフォーマンスが落ちてしまい、
 結局全体にわたってシステムが遅くなってしまう

2.ロック処理
 もしスレッドに登録した方法が、現在登録されていない最新のIDを取得し、後からシステム上で利用するようなものになると、
 同時にそのスレッドが動作した場合、最新のIDを握りあってしまう場合がある。

上の問題を解決するには、スレッドで動作している重い処理が動いていた状態で、外部から同じ処理を受け付けた場合に
「いまいそがしーからあとでな」という方法。これならば問題は解決する。
しかし、これでは顧客はきっといやがる。「動かそうとすると毎回まてってさ。どういうこっちゃ」言うに決まってる。
そして「何とかしてくださいASPで。さもなくば死んでください」的なことを言われるのは目に見えてる。

となると、もう1つ浮かぶ方法としてはキューイングだ。
とにかく、重い処理を「やっといてね」と渡されたら、それを並べておき、端っこからそれを1つ1つガリガリ処理していく方法だ。
これなら顧客が思い処理を放り込んだら「やっておきますからね。10分くらいかかるけど」的メッセージを出しておく。

これなら客も我慢出来るだろう。

こういう方法をメッセージキューイングと言い、PerlにはTheSchwartzやGearManなどがある。

Pythonはというと、あまりないようだが、DjangoXPythonを出していらっしゃる露木さんが作成したQamasuというのがある。

これは、DjangoのAppとして実装されているので、INSTALLED_APPSに入れて、適切に動かすだけ。

明日はこれをつかって、レビューを行う。