I would expect
def my_view(request):
try:
receipt = generate_receipt(...)
receipt.send_email(...)
except SomeKindOfEmailError as e:
# okay do something else
and this should be synchronous and thus blocking. So to not block, they either wrote co-routines (asynchronous) or execute things in parallel. Have I interpreted their problem incorrectly?