Warum erstellt Celery mit dem Redis-Backend trotz der max_connections-Beschränkungen Hunderte von Verbindungen?Python

Python-Programme
Anonymous
 Warum erstellt Celery mit dem Redis-Backend trotz der max_connections-Beschränkungen Hunderte von Verbindungen?

Post by Anonymous »

Ich verwende Django + Celery mit Redis sowohl als Broker als auch als Ergebnis-Backend. Hier ist meine Celery-Konfiguration:

Code: Select all

# 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()
Ich starte meine Worker so:

Code: Select all

celery -A d worker -Q bind_status --loglevel=info -P gevent -c 4
Erwartetes Verhalten
Angesichts der max_connections=10-Einstellungen habe ich erwartet, dass die Gesamtzahl der TCP-Verbindungen zu Redis (Broker + Ergebnis-Backend) bei etwa 10–20 liegt, insbesondere bei Parallelität=4.

Beobachtetes Verhalten
Wenn ich die Anzahl der Verbindungen zu Redis DB 2 (das als Ergebnis-Backend verwendet wird) überprüfe, sehe ich Hunderte von Verbindungen (100–400), obwohl die „max_connections“-Grenzwerte festgelegt sind.

Fragen
  • Warum erstellt Celery trotzdem so viele Verbindungen? max_connections-Grenzwerte?
  • Wie kann ich die Anzahl der TCP-Verbindungen korrekt begrenzen, wenn ich Redis als Ergebnis-Backend mit Gevent-Workern verwende?
  • Gibt es eine Möglichkeit, den Verbindungspool tatsächlich von allen Greenlets und Workern zu teilen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post