If it’s long running, definitely a celery situation.
By default a view must end by sending an HTTP response to the user. This means that everything you do, the user has to wait for. But sometimes you already have everything you need to send the response, why make the user wait just because you have other things to be doing? This is the problem that celery solves.
For example, contact form that sends an email. Without celery, the user is waiting for your web server to do some SMTP biz and actually send the email. You don’t want that. You want to just send them the success page and send the email later.
Django channels I don’t think is for this sort of scenario. It’s for when the user interaction is actually asyncrhonous. You want to make a web chat using websockets. The user has an asyncrhonous connection that could be sending or receiving messages at any time. That sort of thing. Celery is not capable of doing this because the celery workers are completely disconnected from the web server.