def add_periodic_tasks(sender, **kwargs): """Load all periodic tasks from extensions and add them to Celery.""" # Populate the redash.extensions.periodic_tasks dictionary extensions.load_periodic_tasks(logger) for params in extensions.periodic_tasks.values(): # Add it to Celery's periodic task registry, too. sender.add_periodic_task(**params)
def test_dummy_periodic_task(self): # need to load the periodic tasks manually since this isn't # done automatically on test suite start but only part of # the worker configuration extensions.load_periodic_tasks(logger) self.assertIn("dummy_periodic_task", extensions.periodic_tasks.keys())
class ContextTask(TaskBase): abstract = True def __call__(self, *args, **kwargs): with current_app.app_context(): return TaskBase.__call__(self, *args, **kwargs) celery.Task = ContextTask @worker_process_init.connect def init_celery_flask_app(**kwargs): """Create the Flask app after forking a new worker. This is to make sure no resources are shared between processes. """ app = create_app() app.app_context().push() @celery.on_after_configure.connect def add_periodic_tasks(sender, **kwargs): """Load all periodic tasks from extensions and add them to Celery.""" # Populate the redash.extensions.periodic_tasks dictionary extensions.load_periodic_tasks(logger) for params in extensions.periodic_tasks.values(): # Add it to Celery's periodic task registry, too. sender.add_periodic_task(**params)