I am using Celery 4.0.1 with Django 1.10 and I have problems scheduling tasks (task execution works fine). Here is the celery configuration:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings') app = Celery('myapp') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) app.conf.BROKER_URL = 'amqp://{}:{}@{}'.format(settings.AMQP_USER, settings.AMQP_PASSWORD, settings.AMQP_HOST) app.conf.CELERY_DEFAULT_EXCHANGE = 'myapp.celery' app.conf.CELERY_DEFAULT_QUEUE = 'myapp.celery_default' app.conf.CELERY_TASK_SERIALIZER = 'json' app.conf.CELERY_ACCEPT_CONTENT = ['json'] app.conf.CELERY_IGNORE_RESULT = True app.conf.CELERY_DISABLE_RATE_LIMITS = True app.conf.BROKER_POOL_LIMIT = 2 app.conf.CELERY_QUEUES = ( Queue('myapp.celery_default'), Queue('myapp.queue1'), Queue('myapp.queue2'), Queue('myapp.queue3'), )
Then in tasks.py I have:
@app.task(queue='myapp.queue1') def my_task(some_id): print("Doing something with", some_id)
In views.py, I want to schedule this task:
def my_view(request, id): app.add_periodic_task(10, my_task.s(id))
Then I execute the commands:
sudo systemctl start rabbitmq.service celery -A myapp.celery_app beat -l debug celery worker -A myapp.celery_app
But the task is never planned. I do not see anything in the magazines. The task works because, in my opinion, I:
def my_view(request, id): my_task.delay(id)
The task is in progress.
If in my configuration file, if I plan the task manually like this, it works:
app.conf.CELERYBEAT_SCHEDULE = { 'add-every-30-seconds': { 'task': 'tasks.my_task', 'schedule': 10.0, 'args': (66,) }, }
I just can't schedule the task dynamically. Any idea?