Django + DRF: Заставьте маршрут API Django ждать завершения подпроцесса перед возвратом ответа

Мой вопрос касается ожидания завершения подпроцесса перед возвратом ответа вызывающему API. У меня был сценарий, когда я использовал библиотеку python-gnupg, которая выполняла шифрование в другом процессе. Это иногда приводило к ошибке BrokenPipeError. Исключение проглатывалось, потому что ответ возвращался вызывающему процессу со значением 200, хотя на месте ошибки была ошибка.

Допустим, у нас есть

def create(self, request: Request, *args: Any, **kwargs: Any) -> Response:
    method_with_subprocess()
    return super().create(request, *args, **kwargs)

# this method can throw an exception such as "BrokenPipeError"
def method_with_subprocess():
    result = Popen(cmd, shell=False, stdin=PIPE, stdout=PIPE, stderr=PIPE, startupinfo=si)
    ...
    ...
    ...
    return result
Вернуться на верх