Является ли Django (особенно Django Rest Framework) действительно синхронным?
Я знаю некоторые понятия о том, что Django (DRF) является синхронным и у него есть несколько рабочих, но я мало что знаю об этом.
Я попытался проверить это и создал это представление по адресу http://localhost:8000/my-view/:
def my_view(request):
# Simulate some time-consuming task
time.sleep(10)
return HttpResponse("Response after 10 seconds")
Я открыл 7 терминалов и выполнил одну и ту же команду на каждом из них в течение 1-2 секунд (почти одновременно):
curl http://localhost:8000/my-view/ -H 'Content-Type: application/json'
--> и в результате в каждом терминале я получил ответ через 10-12 секунд.
Вот вопрос, если Django синхронный, то почему выполнение этих запросов по одному не заняло 70 секунд?
Единственное объяснение, которое я могу придумать, - это то, что он использует многопоточность.
Django является синхронным (за исключением когда это не так), но у него нет понятия "некоторые рабочие". Сервер приложений, на котором запущено приложение Django, может иметь понятие о рабочих.
Сервер разработки по умолчанию runserver
действительно является многопоточным.
Запустите с python manage.py runserver --nothreading --noreload
для однопроцессного, однопоточного сервера разработки.