import os import celery import raven from raven.contrib.celery import register_signal, register_logger_signal # from celery.schedules import crontab from django.conf import settings # set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'university.settings') class Celery(celery.Celery): def on_configure(self): client = raven.Client(settings.SENTRY_DSN) # register a custom filter to filter out duplicate logs register_logger_signal(client) # hook into the Celery error handler register_signal(client) app = Celery('university') # Using a string here means the worker doesn't have to serialize # the configuration object to child processes. # - namespace='CELERY' means all celery-related configuration keys # should have a `CELERY_` prefix. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks() @app.on_after_configure.connect def setup_periodic_tasks(sender, **kwargs): pass # sender.add_periodic_task(10.0, debug_task.s(), name='add every 10') # Calls test('world') every 30 seconds # sender.add_periodic_task(30.0, debug_task.s('world'), expires=10) # Executes every Monday morning at 7:30 a.m. # sender.add_periodic_task( # crontab(hour=7, minute=30, day_of_week=1), # test.s('Happy Mondays!'), # ) @app.task(bind=True, name='debug_task') def debug_task(self): print('Request: {0!r}'.format(self.request))