Перенос работы на какой-либо другой внешний процесс - действительно правильная вещь, и, как только вы это сделаете, вряд ли это будет последний раз, когда вы это сделаете. Celery / RabbitMQ - достойное решение, и приятно, что они уже есть. В последних выпусках RabbitMQ есть приличное веб-приложение для управления и приличный API-интерфейс, который значительно облегчит присмотр за детьми, а сельдерея хорошо работает в приложениях Django.
Вы можете сделать это с помощью подпроцесса или потоков, но, честно говоря, я думаю, что это плохая привычка. К сожалению, это самый простой способ сделать то, что вы хотите сделать, если вы не хотите разгрузить вещи.
Если вы хотите полностью перейти к «асинхронной электронной почте из гетто», вы можете сделать так, чтобы ваше приложение просто сбрасывало электронные письма в файлы в каталоге и выполняло задание cron, проверяющее каталог для файлов в этом каталоге каждую минуту, и отправляло их как электронные письма, но на самом деле это гораздо больше работы, чем кролик / сельдерей.
Я говорю, просто иди с кроликом / сельдереем. Это не так много работы, как кажется, и это стоит того, чтобы идти вперед.