Celery: запуск PeriodicTask после запуска рабочего

Я работаю с Celery http://celery.readthedocs.org/en/latest/index.html

Мне нужно запускать периодические задачи в определенный момент. Но я хочу начать свою задачу только после запуска работника сельдерея.

Для этого я пытаюсь создать свою собственную «Периодическую задачу». Но я решаю проблему.

Когда я запускаю воркер и выполняю run_tasks.py в другом терминале, кажется, что мои периодические задачи выполняются только один раз.

Как я мог сделать, чтобы моя периодическая задача выполнялась каждые 3 секунды.

Вот часть кода.

Начните с сельдерея:

celery worker --app=worker_manager.celery  --loglevel=info 

файл tasks.py

class MyPeriodicTask(PeriodicTask):

    name = "periodic-task"
    run_every = timedelta(seconds=3)

    def run(self, **kwargs):

        logger = self.get_logger(**kwargs)
        logger.info("Running periodic task!")

файл run_tasks.py

tasks.register(MyPeriodicTask)

wmi_collector_task = worker_app.tasks[MyPeriodicTask.name]

Заранее спасибо.


person Benoit Schom    schedule 02.04.2014    source источник


Ответы (1)


Для запуска периодических задач нужно запустить celery beat. Вы можете сделать это, передав аргумент -B при запуске воркеров:

celery worker -B --app=worker_manager.celery --loglevel=info 
person rparent    schedule 02.04.2014
comment
Спасибо. Когда я добавляю опцию -B, моя периодическая задача выполняется при запуске рабочего. Как я могу запустить задачу внутри run_tasks.py - person Benoit Schom; 02.04.2014