APIキーによってレート制限されているWebAPIにアクセスする必要があるDjangoアプリケーションがあります。APIへのリクエストを管理するために、Django ORMでキューに入れられたタスクリクエストをポーリングし、アプリサーバーに対して非同期で実行するシンプルなバックグラウンドサーバーを作成しました(アプリサーバーは結果をブロックする必要はありません)。ワーカーサーバーは、カスタムのmanage.pyコマンドを使用して起動されます。これらの外部ルックアップの処理要件は非常に最小限であるため、メインのWebサービスから直接実行したいと思います。私はすでにその場しのぎのミューテックスでそれをリギングしているので、私のアプリケーションがスケーリングするとき、これらのワーカーサーバーの1つだけが実行されます。
アプリケーションをデプロイするときに、このワーカーサーバーを自動的に起動するための最良の方法を見つけようとしています。これをコマンドとしてsupervisord.confファイルに追加しようとしましたが、エラーで失敗しましたImportError: No module named django.core.management
。これは、Djangoがインストールされている仮想環境でsupervisordが実行されていないためだと思います。そこで、postinstall
フックから別のsupervisordのコピーを実行してみました。これにより、すべてのコマンドが完了するのを待ってから終了するため、展開が失敗し、postinstall
タイムアウトになります。
これらのアプローチのいずれか、または機能する可能性のある別のアプローチを修正する方法はありますか?python-worker
別のサービスを作成しても、同様の問題が発生するようです。