According to the docs of django channels:
One thing channels do not do, however, is guarantee delivery. If you need certainty that tasks will complete, use a system designed for this with retries and persistence (e.g. Celery), or alternatively make a management command that checks for completion and re-submits a message to the channel if nothing is completed (rolling your own retry logic, essentially).
I worked with celery some years ago. Yes, it is great, it is big, it is too much. I would like to avoid it.
I am searching a simple tasks queue with guarantee delivery and a re-submission on failure.
An other alternative would be python-rq. But this has other disadvantages like using pickle data format instead of json.