2

Python の smptd および asyncore ライブラリを使用して、ポート 25 で受信メールをリッスンするソケット アプリケーションを作成しようとしています。アプリは、必要なアクションを実行するために Django ORM にアクセスできる必要があります。

私がこれまでに行った方法は、Django データベースに直接アクセスし、スーパーバイザーの下で実行する Python スクリプトを作成することでしたが、それは良い解決策ではありませんでした。適切なものは、管理コマンドまたはタスク キュー (Celery) のようなものを持つことです。

この実行時間の長いソケット アプリケーションを実行する Django 管理コマンドを作成した場合、それをスーパーバイザにアタッチするだけでよいでしょうか? デーモン化する必要がありますか?違いは何ですか?どうすればデーモン化できますか? django.utils.daemonize を見つけましたが、それに関するドキュメントは見つかりませんでした。

セロリで解決する方が適切でしょうか? 私のアプリケーションはソケットをリッスンしますが、セロリは私の理解ではトリガーを待っていますが、セロリの起動時に自動的に開始される長時間実行タスクのサンプルは見つかりませんでした。

4

2 に答える 2

3

あなたのタスクでは、python + Supervisordを使用することが最善の解決策だと思います。Celery の目的はタスクの実行であるため、スケジュールされたタスクを実行します。スクリプトが Celery のタスクを作成するときの出口があり、パフォーマンスが向上します。ただし、スケジュールされたバックグラウンド タスクを実行する必要がある場合、またはデーモンで実行時間の長いタスクがある場合にのみ、セロリを使用する必要があります。

于 2012-06-28T10:03:03.533 に答える
0

管理コマンドの代替ソリューションとして、電子メール サーバーに Django が提供する Web サービスを呼び出すことをお勧めします。

これにはいくつかの利点があります

  • メールサーバーは Django から分離されているため、必要に応じて別のサーバーに配置できます
  • 必要な唯一のデーモンはメールプログラム用です
  • セロリは必要ありません -- Django コンポーネントはパッシブであるため、Django はトリガーを気にする必要はありません。
于 2012-07-13T16:53:27.603 に答える