#python #redis #celery
#python #redis #сельдерей
Вопрос:
Я пытаюсь создать интернет-сервис с использованием redis и сельдерея. Мой экземпляр redis привязан к 10 одновременным клиентам. Когда я пытаюсь запустить только одного рабочего, он по какой-то причине инициирует 6-9 подключений (я вижу это на своей панели администратора redis). Через некоторое время он начинает выдавать ошибку «максимальное количество клиентов достигнуто». Это ожидаемое поведение, когда рабочий использует так много подключений? Должен ли я переключиться на rabbitmq?
config = Configuration(None, EnvironmentType.beta, '../configuration.json')
beta_broker = Celery('src.beta_module', broker=config.celery_redis_url, include=['src.beta_module.notifications'])
def main():
beta_broker.start(argv=['celery', 'worker', '-E', '--concurrency=1', '--loglevel=DEBUG'])
if __name__ == '__main__':
main()
ОБНОВЛЕНО
Я пытался настроить redis_max_connections, но это не помогает
beta_broker = Celery('src.beta_module', broker=config.celery_redis_url, include=['src.beta_module.notifications'])
beta_broker.conf.redis_max_connections = 2
broker_pool_limit = 0
BROKER_TRANSPORT_OPTIONS = {
‘max_connections’: 20,
}
все еще создает 8 подключений к redis
Есть ли какой-либо способ отключить получение результатов задач? Мне все равно не нужна эта функциональность. Может быть, это поможет уменьшить количество подключений?
ОБНОВЛЕНО
Примерно через 3 дня исследований и чтения многочисленных блогов и документов я решил переключиться на rq
Ответ №1:
вы пробовали установить максимальное количество подключений для пула соединений redis с помощью celery? https://docs.celeryproject.org/en/stable/userguide/configuration.html#redis-max-connections
redis_max_connections
— По умолчанию: без ограничений.
Комментарии:
1. Не помогает. Я все еще вижу большое количество клиентов. Проверьте мои обновления в сообщении
Ответ №2:
Попробуйте следующее:
beta_broker.conf["broker_transport_options"] = {'fanout_prefix': True,
'fanout_patterns': True,
'max_connections': 2,
'socket_keepalive': True},
beta_broker.conf["broker_pool_limit"] = 2
Комментарии:
1. Спасибо вам за решение, я обязательно попробую это сделать, но я решил переключиться на RQ. Для меня это оказалось более простым и понятным.
2. Да, если вы хотите просто, тогда Huey ( huey. readthedocs.io/en/latest ) или RQ стоит попробовать… Имхо, сельдерей намного мощнее и гибче (пользователь может написать реализацию любой важной функции Сельдерея — у нас уже есть собственный автоскалер, планировщик, мониторинг и т.д.).