Почему Celery с бэкэндом Redis создает сотни соединений, несмотря на ограничения max_connectionsPython

Программы на Python
Ответить
Anonymous
 Почему Celery с бэкэндом Redis создает сотни соединений, несмотря на ограничения max_connections

Сообщение Anonymous »

Я использую Django + Celery с Redis как брокер и сервер обработки результатов. Вот моя конфигурация Celery:

Код: Выделить всё

# Celery settings
CELERY_BROKER_URL = 'redis://redis:6379/1'
CELERY_RESULT_BACKEND = 'redis://redis:6379/2'

CELERY_BROKER_POOL_LIMIT = 10
CELERY_REDIS_MAX_CONNECTIONS = 10
CELERY_BROKER_TRANSPORT_OPTIONS = {'max_connections': 10}
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS = {'max_connections': 10}

CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

WORKER_MAX_MEMORY_PER_CHILD_KB = 200_000
CELERY_WORKER_MAX_MEMORY_PER_CHILD = 200_000
CELERY_WORKER_MAX_TASKS_PER_CHILD = 1000

CELERY_BEAT_SCHEDULE = celery_beat_schedule
CELERY_TASK_DEFAULT_QUEUE = 'default'
CELERY_TASK_QUEUES = (
Queue('default'),
Queue('bind_status'),
)

CELERY_ONCE = {
'backend': 'celery_once.backends.Redis',
'settings': {
'url': "redis://redis:6379/3",
'default_timeout': 60*60,
}
}

app = Celery('')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.conf.worker_send_task_events = True
app.conf.task_send_sent_event = True
app.conf.task_track_started = True
app.conf.result_extended = True
app.conf.broker_connection_retry_on_startup = True
app.autodiscover_tasks()
Я запускаю своих воркеров следующим образом:

Код: Выделить всё

celery -A d worker -Q bind_status --loglevel=info -P gevent -c 4
Ожидаемое поведение
Учитывая настройки max_connections=10, я ожидал, что общее количество TCP-подключений к Redis (брокер + серверная часть результатов) составит около 10–20, особенно при concurrency=4.

Наблюдаемое поведение
Когда я проверяю количество подключений к Redis DB 2 (используется в качестве серверной части результатов), я вижу сотни подключений (100–400), хотя установлены ограничения `max_connections`.

Вопросы
  • Почему Celery создает так много подключений, несмотря на ограничения max_connections?
  • Как я могу правильно ограничить количество TCP-соединений при использовании Redis в качестве серверной части результата с gevent Workers?
  • Есть ли способ сделать пул соединений фактически общим для всех гринлетов и рабочих?


Подробнее здесь: https://stackoverflow.com/questions/798 ... ite-max-co
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»