Added support for periodic Celery tasks.

You have to run "manage.py celery beat" for this to work too. Run
"manage.py celery beat -- --help" to get CLI option help.
This commit is contained in:
2017-09-14 16:00:59 +02:00
parent 5d137ac997
commit 82d2921424
3 changed files with 26 additions and 0 deletions

View File

@@ -465,6 +465,13 @@ class PillarServer(Eve):
result_expires=3600,
)
# This configures the Celery task scheduler in such a way that we don't
# have to import the pillar.celery.XXX modules. Remember to run
# 'manage.py celery beat' too, otherwise those will never run.
beat_schedule = self.config.get('CELERY_BEAT_SCHEDULE')
if beat_schedule:
self.celery.conf.beat_schedule = beat_schedule
self.log.info('Pinging Celery workers')
self.log.info('Response: %s', self.celery.control.ping())

View File

@@ -58,3 +58,12 @@ def purge():
log.warning('Purging all pending Celery tasks.')
current_app.celery.control.purge()
@manager_celery.option('args', nargs='*')
def beat(args):
"""Runs the Celery beat."""
from celery.bin.beat import beat
return beat(app=current_app.celery).run_from_argv('je moeder', args, command='beat')

View File

@@ -178,6 +178,16 @@ TLS_CERT_FILE = requests.certs.where()
CELERY_BACKEND = 'redis://redis/1'
CELERY_BROKER = 'amqp://guest:guest@rabbit//'
# This configures the Celery task scheduler in such a way that we don't
# have to import the pillar.celery.XXX modules. Remember to run
# 'manage.py celery beat' too, otherwise those will never run.
CELERY_BEAT_SCHEDULE = {
'regenerate-expired-links': {
'task': 'pillar.celery.file_link_tasks.regenerate_all_expired_links',
'schedule': 600.0,
'args': ('gcs', 100)
},
}
# Mapping from user role to capabilities obtained by users with that role.
USER_CAPABILITIES = defaultdict(**{