def make_celery(app): celery_app = Celery( 'layman', backend=settings.LAYMAN_REDIS_URL, broker=settings.LAYMAN_REDIS_URL, include=get_task_modules(), ) celery_app.conf.update( # http://docs.celeryproject.org/en/latest/getting-started/brokers/redis.html broker_transport_options={ 'visibility_timeout': 3600, # 1 hour 'fanout_prefix': True, 'fanout_patterns': True, }, # https://stackoverflow.com/a/38267978 task_track_started=True, ) class Task(celery_app.Task): def __call__(self, *args, **kwargs): with app.app_context(): return self.run(*args, **kwargs) class AbortableTask(abortable.AbortableTask): def __call__(self, *args, **kwargs): with app.app_context(): return self.run(*args, **kwargs) celery_app.Task = Task celery_app.AbortableTask = AbortableTask return celery_app