Ejemplo n.º 1
0
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