2015-06-21 3 views
6

Я хочу, чтобы пользователь моего приложения запускал/останавливал периодические задачи стиля crontab с использованием эффекта Celery. Сейчас я бег сельдерея сДинамическое расписание Задача бисера из сельдерея с флягой

venv/bin/celery worker -A celery_worker.celery --loglevel=info 

я получил сельдерей Удара работает с этим простым примером:

@celery.task 
def add(x, y): 
    return x + y 

на моем конфигурационный файл:

CELERYBEAT_SCHEDULE = { 
    'add-every-30-seconds': { 
     'task': 'app.email.add', 
     'schedule': timedelta(seconds=30), 
     'args': (16, 16) 
    }, 
} 
CELERY_TIMEZONE = 'UTC' 

потом запустить сельдерей бить работник с

celery -A celery_worker.celery beat -s ~/Documents/cesco-automation/power/celerybeat-schedule 

И это работает отлично! Но мне нужно больше контролировать график.

Также на моей оболочке приложения я могу это сделать.

>>>add.apply_async([80,800],countdown=30) 

>>> from datetime import datetime, timedelta  
>>> tomorrow = datetime.now() + timedelta(days=1) 
>>> add.apply_async(args=[10, 10], eta=tomorrow) 

Это замечательно, но я разрабатываю приложение для домашней автоматизации, поэтому мне также необходимо остановить задачи. Как мне это сделать??

Я также нашел это link, в котором упоминаются классы планировщика django. Это именно то, что мне нужно. На Celery docs он упоминает флаг -S, но я не знаю, как правильно добавить класс в мое приложение Flask. Как я могу использовать его с Flask?

Нужен ли мне эффект Сельдерея? Есть ли другой вариант, другой crontab? Кронтаб, кажется, не достаточно острый.

+0

Планировщик по сельдеру по умолчанию сортирует. Даже не заставляйте меня начинать общаться с часовыми поясами. Я бы использовал планировщик базы данных, могу посмотреть на него для django http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html#using-custom-scheduler-classes – reptilicus

+0

Я упоминаю тот же документ на вопрос, но не знаю, как заставить его работать. Можно ли использовать планировщик Django в моем приложении Flask? Как? – CESCO

+0

@CESCO, Привет, вы пробовали использовать планировщик django в флеш-приложении? если да, пожалуйста, поделитесь –

ответ

4

Эта функциональность будет доступна в Celery ver.4.0. Динамическое планирование задач поддерживается только в версии разработки: http://docs.celeryproject.org/en/master/userguide/periodic-tasks.html#beat-entries

+0

Похоже, что Celery 4.0.0 был выпущен (стабильно) на 2016-11-04: http://docs.celeryproject.org/en/latest/changelog.html#version-4-0-0. Это означает, что доступны динамические периодические графики crontab. –

+0

У вас есть пример где-нибудь, как использовать динамические crontabs? – Deusdeorum

+1

Это работает только до того, как бит начнется. Все, что добавлено в расписание, не будет поднято до тех пор, пока бит не будет перезапущен.По-прежнему нет возможности динамически добавлять периодические задачи. – Dineshs91

0

Хотя мы отказались от фляги/питона для нашего приложения. Эта проблема была решена с помощью планировщика, называемого Kala. Это простой JSON через HTTP API, в котором работает Chronus, что делает то же самое, что и Kala, но гораздо более надежное и масштабируемое решение Airbnb. Его полностью языковой агностик.

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

  • Нет связанных вопросов^_^