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