2015-08-27 2 views
0

В настоящее время я тестирую хронометр Django для долговременной задачи.Django Chroniker: Как остановить настраиваемую команду при ее запуске

Да, я также опробовал Сельдерей на длительное время, но я хочу попробовать его с помощью django-chroniker, так как он объединяет больше из материалов для администрирования, начиная с &.

Проблема, с которой я столкнулся, заключается в том, что, хотя «запуск» работает, кнопка остановки в django отображает только хорошее сообщение, но, похоже, фактически не останавливает мой процесс.

Так что я создал очень простую пользовательскую команду:

import time 
import logging 
import logging.config 

from django.core.management.base import BaseCommand, CommandError 

from longrunningfunction import run_extraction 

class Command(BaseCommand): 
    help = 'Closes the specified poll for voting' 
    logging.config.fileConfig('logging.conf') 

    def handle(self, *args, **options): 
    logger = logging.getLogger('top') 
    logger.debug('Launching test_cmd %s %s', args, options) 
    run_extraction() 

Так что теперь команда запускается, когда я нажимаю на остановке в админ. Итак, что мне нужно сделать, чтобы это было учтено в моем коде? Как я могу прервать выполнение run_extraction?

Я также видел в исходном коде, что поле job_stop задано равным True. Так что мне нужно будет передать ссылку на это поле и регулярно проверять его?

--edit 28/08/2015 После того, как подвергая проблему на IRC, я теперь рассматривает 3 следующие решения:

  1. Использование сигналов для run_extraction, чтобы обнаружить изменение состояния и действовать соответствующим образом. https://docs.djangoproject.com/en/1.8/topics/signals/

  2. Использование Postgres уведомит спусковые http://www.postgresql.org/docs/9.0/static/sql-notify.html

  3. Установить в Chron запустить каждую минуту, получить все объекты с force_start или force_stop Истина затем действовать соответственно.

Примечание: 2 & 3 являются Y3K идеи о Джанго Irc канале.

Лучшее!

ответ

2

Ну, похоже, вам действительно нужна реактивность. У PGSQL есть функция «NOTIFY» IIRC? Может быть, взгляните на это.

Хмм или если вы не возражаете, установите хрон для запуска каждые N минут и получите объекты X с помощью force_start или force_stop True, а затем вызовите то, что вам нужно. Не знаю, насколько эффективна эта опция.

От #django на IRC :)

Смежные вопросы