2011-08-08 5 views
4

私はDjangoプロジェクトがうまく動作していて、さまざまなソースからデータを収集し、そのデータをインデックスに格納する別個のバックグラウンドプロセスを持っています。Django、シグナルと別のプロセス

SourcesというDjangoアプリには、本質的に、データが出てくるソースのリストが含まれています。私は、新しいエントリがSourcesモデルに置かれたときに起動/呼び出されるシグナルを作成することに成功しました。

私の質問は、誰かが私のバックグラウンドプロセスにシグナル/メッセージの形式を送信して、Sourcesモデルが変更されたことを示す簡単な方法はありますか?または、それはなので、x秒ごとに変更をポーリングするだけですか?はるかに簡単ですか?

何か助けていただきありがとうございました。

+0

私はあなたが私たちのバックグラウンド・プロセスに関する十分な情報を与えてくれたとは思いません。彼らは何ですか? Pythonの 'multiprocessing'で動作しますか? – agf

+0

申し訳ありません - バックグラウンドプロセスは完全に別です。別のコマンドで端末で起動しました。 –

答えて

5

あなたが話しているバックグラウンドプロセスをどのように実行しているのかは不明です。

とにかく、あなたのバックグラウンドタスクでは、Sourcesモデルを直接使用することをお勧めします。 Djangoの領域を離れずにタスクを実行する便利な方法があります(モデルにアクセスできるように、例えばCelery [1]やRQ [2]を使用できます)。

どのメッセージも渡す必要がありますが、Sourcesモデルへの変更は、次にタスクを実行するときに有効になります。

[1]セロリはオープンソースの非同期タスクキュー/ジョブキューです。セットアップが難しくなく、よくジャンゴと統合されています。

[2] RQは「Redis Queue」を意味し、「ジョブをキューに入れ、それらをバックグラウンドでワーカーで処理するための単純なPythonライブラリ」です。

+0

素晴らしい、私はセロリに行くと思います。あなたの返信に多くの感謝! –

1

スプリット秒の待ち時間を必要としない場合は、ポーリングが最も簡単です。プロセスへ

あなたは、しかし、あなたはおそらく(プラットフォームに応じて、またはIPCの他の方法)UNIX信号を送信する、たとえば、いずれかに見てみたい

  • ますない場合
  • バックグラウンドプロセスを持つ単純なリスニングソケットを持っているだけで、例えば1バイト(これは明らかにIPCの形式)に送信し、トリガーするアクションをトリガーします。
  • または何らかのタスク/メッセージキュー。 CeleryまたはZeroMQが考えられます。
関連する問題