Distribución de tareas basada en colas
Aprenda cómo las colas de mensajes, como Redis y Celery, desacoplan el descubrimiento de URL de la descarga para escalar el scraping entre muchos workers.
Distribución de tareas basada en colas es una lección gratuita de Web Scraping & Bots en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Web Scraping & Bots, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Web Scraping & Bots incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
The Scaling Bottleneck
A single-process scraper is limited by one machine's CPU and network. To scale, you split work across many workers running in parallel, possibly on different servers.
A task queue is the glue that distributes work safely.
Producers and Consumers
The queue pattern has two roles:
- Producers discover URLs and push tasks onto the queue.
- Consumers (workers) pull tasks and fetch the pages.
Decoupling them lets each side scale independently.
A Redis-Backed Queue
Redis lists make a simple, fast queue. Producers LPUSH URLs; workers BRPOP them, blocking until work is available.
import redis
r = redis.Redis()
# producer
r.lpush('urls', 'https://site.com/page1')
# worker
_, url = r.brpop('urls')
print('processing', url)Why Not Share a Python List
An in-memory list only works within one process. A Redis queue is shared across processes and machines, persists if a worker crashes, and handles concurrency atomically.
Introducing Celery
Celery is a full task framework built on a broker like Redis. You define tasks as functions and call them asynchronously; workers pick them up automatically.
from celery import Celery
app = Celery('scraper', broker='redis://localhost:6379/0')
@app.task
def scrape(url):
return fetch_and_parse(url)Dispatching Tasks
Calling .delay() enqueues the task and returns immediately. Workers running celery worker consume and execute them in parallel.
for url in discovered_urls:
scrape.delay(url)Retries and Failures
Celery can automatically retry failed tasks with backoff, so a transient network error does not lose a URL.
@app.task(bind=True, max_retries=3, default_retry_delay=10)
def scrape(self, url):
try:
return fetch_and_parse(url)
except ConnectionError as e:
raise self.retry(exc=e)Deduplicating URLs
In distributed crawling the same URL can be discovered twice. Use a Redis set as a 'seen' filter so each page is fetched once.
if r.sadd('seen', url):
scrape.delay(url) # sadd returns 1 only if newly addedBackpressure and Concurrency
Tune worker concurrency to match target-site politeness and your bandwidth. Too many workers overwhelm the site; too few leave the queue backed up. Monitor queue length to find balance.
# start 4 worker processes
// celery -A scraper worker --concurrency=4Results and Storage
Workers should write parsed data to a shared store (a database or object storage), not return it through the queue. The queue carries tasks; the datastore holds results.
Priority Queues
Not all URLs are equal. Route urgent tasks (a category index that unlocks many child pages) to a high-priority queue so workers handle them before low-value pages.
scrape.apply_async(args=[url], priority=9) # higher runs soonerQuick Check
Test your understanding of queue-based distribution.
Recap
You learned to scale scraping with task queues: the producer/consumer pattern, Redis-backed queues, Celery tasks with .delay(), automatic retries, URL deduplication with Redis sets, tuning concurrency, and writing results to shared storage.
Aprende Python con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 12
- Lecciones
- 48
Preguntas frecuentes
¿La lección «Distribución de tareas basada en colas» es gratis?
Sí — el texto completo de «Distribución de tareas basada en colas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Web Scraping & Bots, actualiza a CoddyKit PRO. El curso de Web Scraping & Bots incluye 4 lecciones en total.
¿Qué aprenderé en «Distribución de tareas basada en colas»?
Aprenda cómo las colas de mensajes, como Redis y Celery, desacoplan el descubrimiento de URL de la descarga para escalar el scraping entre muchos workers. Practicas Web Scraping & Bots con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Web Scraping & Bots?
No se requiere experiencia previa. Web Scraping & Bots en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Distribución de tareas basada en colas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Web Scraping & Bots?
Sí. Cada lección de Web Scraping & Bots incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Scraping distribuido con Scrapy
- Cloud Functions para scraping
- Supervisión y registro
- Distribución de tareas basada en colas