Hi Louis, thanks for a comprehensive article.
Unfortunately (because it seems to be the de facto standard for django tasks), Celery is an extremely flawed library with a lot of legacy code, poorly chosen defaults, and difficult-to-debug patches.
That makes it quite hard to set up and maintain a production-worthy task queue.
It might help readers to know that there's a replacement called Dramatiq (google it) which moves past a lot of Celery's problems.
This tutorial will still be valuable, as the set-up and usage is quite similar to what's detailed here and there's a django integration (django-dramatiq) to help.
(I'm not a dramatiq author, just a relieved former celery user!)