DRF - непоследовательность в дросселировании

Здравствуйте, я столкнулся с крайней непоследовательностью в механизме дросселирования в Django rest framework. У меня есть конечная точка api для дросселирования 10 requests/sec, но когда я посылаю 20 запросов одновременно с помощью Apache Benchmark, api должен дросселировать 10 запросов, а он дросселирует 4, 6 и это непоследовательно. иногда он даже не дросселирует ни одного запроса.

class StatusApiThrottle(CustomeRateThrottle):
    rate = '10/s'
    scope = 'status'

    def allow_request(self, request, view):  # independent throttle for GET request on view
        if request.method == "POST":
            return True
        return super().allow_request(request, view)

конфигурация кэша


CACHES = {
"default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient"
        },
        "KEY_PREFIX": "myapp"
    }
}

Запустите приложение с помощью gunicorn

gunicorn app --workers 2 --threads=2

Тестирование с использованием Apache benchMark


$ ab -n 20 -c 20 -v 1 http://127.0.0.1:8080/api/v1/access/842b1012-53ef-4e98-9a20-484e681c3789

result #1

Complete requests:      20
Failed requests:        6

result #2

Complete requests:      20
Failed requests:        3


Вернуться на верх