КРИТИЧЕСКОЕ ВРЕМЯ РАБОТНИКА в django готовить ie резак с JsonResponse - PullRequest
0 голосов
/ 05 августа 2020

У меня есть следующие журналы

$ docker logs 1e5e704507c2
PostgreSQL is available

2198 static files copied to '/app/staticfiles', 6582 post-processed.
[2020-08-05 17:46:12 +0000] [10] [INFO] Starting gunicorn 20.0.0
[2020-08-05 17:46:12 +0000] [10] [INFO] Listening at: http://0.0.0.0:5000 (10)
[2020-08-05 17:46:12 +0000] [10] [INFO] Using worker: sync
[2020-08-05 17:46:12 +0000] [17] [INFO] Booting worker with pid: 17
[2020-08-05 17:46:12 +0000] [18] [INFO] Booting worker with pid: 18
[2020-08-05 17:46:12 +0000] [19] [INFO] Booting worker with pid: 19
[2020-08-05 17:46:12 +0000] [20] [INFO] Booting worker with pid: 20
INFO 2020-08-05 17:48:21,763 views 18 140288548957512 meeting_approve:
[2020-08-05 17:48:51 +0000] [10] [CRITICAL] WORKER TIMEOUT (pid:18)
[2020-08-05 17:48:51 +0000] [18] [INFO] Worker exiting (pid: 18)
[2020-08-05 17:48:52 +0000] [21] [INFO] Booting worker with pid: 21
INFO 2020-08-05 17:52:06,252 views 17 140288548957512 meeting_approve:
[2020-08-05 17:52:36 +0000] [10] [CRITICAL] WORKER TIMEOUT (pid:17)
[2020-08-05 17:52:36 +0000] [17] [INFO] Worker exiting (pid: 17)
[2020-08-05 17:52:36 +0000] [22] [INFO] Booting worker with pid: 22

, и это мое мнение

# views.py
def approve(request, pk):
    logger.info("meeting_approve:")
    try:
        logger.info("approve: query company api")
        r = requests.get(
            f"{foo}/bar",
            timeout=5,
        )
    except Timeout:
        messages.add_message(
            request, messages.WARNING, "Cannot connect to company api."
        )
        logger.warn(f"meeting_approve: Cannot connect to company api")
        return JsonResponse({"error": "Cannot connect to company api"}, status=500)
    logger.info(f"meeting_approve: check security {pk}")
    meeting = Meeting.objects.get(id=pk)
    logger.info(f"meeting_approve: check if blocked {meeting.company}")

Почему время ожидания JsonResponse истекает?

1 Ответ

0 голосов
/ 05 августа 2020

Проблема заключалась в том, что любой статус 5xx приведет к тайм-ауту сервера. Возможно, это связано с тем, что api пытается отправить администраторам трассировку стека по электронной почте, а электронная почта не настроена на сервере.

Обходной путь состоял в том, чтобы не использовать статус 5xx.

return JsonResponse({"error": "Cannot connect to company api"}, status=404)
...