Удар сельдерея выполняет Периодические задачи при запуске, даже если они не подлежат исполнению.
Они работают в 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
задач выполнены ...
Предложения по предотвращению такого поведения?