BacklogLimitExceeded ошибка с сельдереем, Django, RabbitMQ (или Redis) и RPC - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть приложение django, которое иногда должно выполнять миллионы запросов API.Чтобы сделать это быстрее, я использую Celery для отправки запросов и жду ответа, прежде чем потреблять их.

Я попытался настроить Celery с Redis в качестве посредника и бэкэнда:

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'

. Это вызвало ошибку: BacklogLimitExceeded: 54c6d0ce-318d-461b-b942-5edcd258b5f1

Затем я перешел на брокер RabbitMQ и бэкэнд RPC:

CELERY_BROKER_URL = 'amqp://guest@localhost//'
CELERY_RESULT_BACKEND = 'rpc://'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'

Та же ошибка

Мой код для вызова API довольно классический:

У меня естьсписок urls_chunks = [[url1, url2....url1000], [url1, url2....url1000]] Это необходимо из-за ограничения скорости API 1000 в минуту (в конце каждой группы вызовов я сплю 1 минуту)

for urls in urls_chunks:
    returned_data = []
    for url in urls:
        result = call_api.delay(url)
        returned_data.append(result)

for response in returned_data:
    result = response.result
    ## Do something with the result
    sleep(60)

Я думаю, что все вызовы / ответы URL-адресовгде-то кешируется и превышает память?но я думал, что этого не произойдет с RPC.Я думал об использовании purge (), но он тоже не работает, так как он не поддерживается RPC ...

Кто-нибудь знает, как с этим бороться?В настоящее время я работаю в среде разработки на MacOS с целью развертывания в Ubuntu.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...