Я использую django-rest-framework для создания RESTful API.У меня проблемы с задержкой ответа, поэтому я решил использовать библиотеку silk
для профилирования ответа представления.Вот код вида:
class ChecklistDetail(APIView):
permission_classes = (permissions.IsAuthenticated, StaffPermission)
@silk_profile(name='get ChecklistDetail')
def get(self, request, pk, format=None):
# pylint: disable=E1101
checklist = Checklist.objects.get(pk=pk)
serializer = ChecklistSerializer(checklist, many=False)
return Response(serializer.data)
После выполнения запроса у меня были следующие результаты:
Результат шелкового профилирования
Почтальон Тиммингс
Это разница почти в 50 раз!
Может ли кто-нибудь помочь мне найти и исправить эту разницу?
Класс StaffPermission
:
class StaffPermission(permissions.BasePermission):
message = 'Only active staff can perform unsafe methods.'
def has_permission(self, request, view):
if request.method in permissions.SAFE_METHODS:
return request.user.is_authenticated and request.user.is_active
else:
return request.user.is_staff and request.user.is_active
Моя конфигурация nginx:
upstream atlas-intelligence-server {
ip_hash;
server atlas-intelligence-server:80;
}
# portal
server {
location / {
proxy_pass http://atlas-intelligence-server/;
}
listen 80;
client_max_body_size 100M;
server_name localhost;
# Avoid 504 HTTP Timeout Errors
proxy_connect_timeout 605;
proxy_send_timeout 605;
proxy_read_timeout 605;
send_timeout 605;
keepalive_timeout 605;
}
Моя команда gunicorn:
gunicorn atlas_intelligence.wsgi -b 0.0.0.0:80 --workers 2 --log-level debug --error-logfile /var/log/gunicorn_err.log --log-file /var/log/gunicorn.log --timeout 300
И машины nginx (nginx:1.15.4-alpine
), и машины django являются контейнерами.