We always separate out processes like: image thumb-nailing, indexing records and sending out emails from a user request cycle. Can’t keep him waiting for all this.
Rather we use simple AWS SQS to communicate to hungry worker units about these tasks, workers pick up the message and they know what to do. Workers, are small units of code, deployed on their own instances. This makes it easier to analyze performance, monitor and independently scale them.