Сельдерейский удар выполняет Периодические Задачи каждый раз, когда он запускается - как предотвратить это - PullRequest
0 голосов
/ 03 июня 2019

Удар сельдерея выполняет Периодические задачи при запуске, даже если они не подлежат исполнению.

Они работают в Flask и развернуты в Heroku. Поведение также происходит, когда выполняется в localhost. Я использую Redis в качестве брокера и бэкэнда.

Конфигурация сельдерея:

import os
from celery.schedules import crontab

broker_url = os.environ.get('REDISCLOUD_URL'),
result_backend = os.environ.get('REDISCLOUD_URL')
task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']
broker_pool_limit = None 
redis_max_connections = None

# Set scheduled email service
beat_schedule = {
    'send-monthly-email': {
        'task': 'routes.send_email_1',
        'schedule': crontab(0, 8, day_of_month='1'), # Execute on the first day of every month.
        # 'kwargs': kargs\
        'args': (3,) #Pass res_check_id=3 for monthly template
    },
    'send-weekly-email': {
        'task': 'routes.send_email_1',
        'schedule': crontab(0, 8, day_of_week='3'), # Execute on day 3 of each week
        'args': (2,) #Pass res_check_id=2 for weekly template
    },
    'cron-test-task': {
        'task': 'routes.send_email_1',
        'schedule': crontab(), # test every minute
        'args': (2,) #Pass res_check_id=2 for weekly
    },
}

Выполнить удар:

celery beat -A celery --loglevel=INFO

две из трех задач автоматически запускаются при запуске:

celery beat v4.3.0 (rhubarb) is starting.
__    -    ... __   -        _
LocalTime -> 2019-06-03 09:52:01
Configuration ->
    . broker -> Redis URL
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%INFO
    . maxinterval -> 5.00 minutes (300s)
[2019-06-03 09:52:01,067: INFO/MainProcess] beat:
Starting...
[2019-06-03 09:52:02,224: INFO/MainProcess] Scheduler: Sending due task send-monthly-email (routes.send_email_1)
[2019-06-03 09:52:04,296: INFO/MainProcess] Scheduler: Sending due task cron-test-task (routes.send_email_1)

Поскольку heroku ежедневно перезапускает сервер / dyno, это вызывает спам среди пользователей.

почему-то только 2 из 3 beat_schedule задач выполнены ...

Предложения по предотвращению такого поведения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...