Sono molto nuovo per Celery e questa è la domanda che ho:Celery: come limitare il numero di attività in coda e interrompere l'alimentazione quando è piena?
Supponiamo di avere uno script che deve costantemente recuperare i nuovi dati dal DB e inviarlo ai lavoratori che usano Celery.
tasks.py
# Celery Task
from celery import Celery
app = Celery('tasks', broker='amqp://[email protected]//')
@app.task
def process_data(x):
# Do something with x
pass
fetch_db.py
# Fetch new data from DB and dispatch to workers.
from tasks import process_data
while True:
# Run DB query here to fetch new data from DB fetched_data
process_data.delay(fetched_data)
sleep(30);
Qui è la mia preoccupazione: i dati vengono scaricati ogni 30 secondi. la funzione process_data() potrebbe richiedere molto più tempo e, a seconda della quantità di lavoratori (specialmente se troppo pochi), la coda potrebbe essere rallentata come ho capito.
- Non riesco ad aumentare il numero di lavoratori.
- Posso modificare il codice per evitare di alimentare la coda quando è piena.
La domanda è come impostare la dimensione della coda e come faccio a sapere che è piena? In generale, come affrontare questa situazione?
Aggiungere più lavoratori per recuperare il ritardo con la coda – noorul
@noorul: questo è stato non è la mia domanda. Non posso aggiungere più lavoratori. Posso solo astenermi dal dar da mangiare alla coda se è piena. La mia domanda è: come posso impostare le sue dimensioni e come faccio a sapere che è pieno. – jazzblue
Non sono sicuro di come possiamo definire la pienezza di una coda di Celery. Può essere che puoi mettere un'altra coda davanti alla coda di Celery e controllarla. – noorul