Джанго, Сигналы и еще один процесс - PullRequest
4 голосов
/ 08 августа 2011

У меня хорошо работает мой проект Django и отдельный фоновый процесс, который будет собирать данные из различных источников и сохранять эти данные в индексе.

У меня есть модель в приложении Django, которая называетсяSources, который содержит, по сути, список источников, из которых могут поступать данные!Мне успешно удалось создать сигнал, который активируется / вызывается, когда в модель Sources добавляется новая запись.

Мой вопрос: есть ли простой способ, который кто-нибудь знает, с помощью которого я могу отправитькакая-то форма сигнала / сообщения для моего фонового процесса, указывающая на то, что модель Sources была изменена?Или я должен просто прибегать к опросу на предмет изменений каждые x секунд, потому что это так намного проще?

Большое спасибо за любую полученную помощь.

Ответы [ 2 ]

6 голосов
/ 08 августа 2011

Непонятно, как у вас работает фоновый процесс, о котором вы говорите.

В любом случае, я бы посоветовал использовать в качестве фоновой задачи модель Sources напрямую. Существуют удобные способы выполнить задачу, не выходя из области Django (чтобы иметь доступ к вашим моделям. Например, вы можете использовать Celery [1] или RQ [2].

Тогда вам не нужно будет передавать никакие сообщения, любые изменения в модели Sources вступят в силу при следующем запуске вашей задачи.

[1] Celery - это асинхронная очередь задач / очередь заданий с открытым исходным кодом, ее нетрудно настроить и она хорошо интегрируется с Django.

[2] RQ означает «Очередь Redis», это «простая библиотека Python для организации очередей заданий и их обработки в фоновом режиме с рабочими».

1 голос
/ 08 августа 2011

Опрос, вероятно, самый простой, если вам не требуется задержка в доли секунды.

Однако, если вы это сделаете, вы, вероятно, захотите изучить, скажем,

  • отправка в процесс сигнала UNIX (или других методов IPC, в зависимости от платформы)
  • имея фоновый процесс, имеет простой сокет прослушивания, который вы просто отправляете, скажем, байту (который, по общему признанию, является формой IPC), и который запускает действие, которое вы хотите запустить
  • или какая-то задача / очередь сообщений. Сельдерей или ZeroMQ приходят на ум.
...