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