У меня есть приложение 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.
Спасибо!