Django provides a concept called signals, which allow you as a developer to listen to some predefined events or create your own for other code to the execute. Although signals feel like an asynchronous mechanism, they are synchronous so they are not the place to do the long running processes, they should still be off loaded to a background worker.
So when should you use signals? For most engineers almost never in a typical project, as they make control flow harder to follow and therefore making maintainablity and readability harder. The time to use them is when you want to explicitly invert the control flow to break a circular dependency with between apps, most typically this is when a reusable app is the desired outcome.