Apache(mod_wsgi、prefork)によって提供されるPylonsWebアプリケーションがあります。Apacheが原因で、アプリケーションコードを同時に実行する複数の個別のプロセスがあります。「ライブ」応答時間を改善するために、アプリケーションがバックグラウンドで処理するために延期したい重要ではないタスクのいくつか。だから私はタスクキューについて考えています。多くのApacheプロセスがこのキューにタスクを追加し、単一の別個のPythonプロセスがそれらを1つずつ処理してキューから削除します。
キューは、停電やサーバーの再起動などによってキューに入れられた未処理のタスクが失われないように、ディスクに永続化することが望ましいです。問題は、そのようなキューを実装するための合理的な方法は何でしょうか。
私が試したことについては、単純なSQLiteデータベースと、キュー項目を格納するための単一のテーブルから始めました。負荷テストで、同時実行性のレベルを上げると、予想どおり「データベースロック」エラーが発生し始めました。迅速な「n」ダーティな修正は、SQLiteをMySQLに置き換えることでした。並行性の問題をうまく処理しますが、私がしなければならない単純なことにはやり過ぎのように感じます。キュー関連のDB操作も、プロファイリングレポートに目立つように表示されます。