توزيع المهام القائم على قوائم الانتظار
تعلّم كيف تفصل قوائم انتظار الرسائل، مثل Redis وCelery، اكتشاف عناوين URL عن جلبها لتوسيع نطاق الكشط عبر عدد كبير من العاملين.
توزيع المهام القائم على قوائم الانتظار درس مجاني في Web Scraping & Bots على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Web Scraping & Bots، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Web Scraping & Bots 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
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.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 12
- الدروس
- 48
الأسئلة الشائعة
هل درس «توزيع المهام القائم على قوائم الانتظار» مجاني؟
نعم — نص درس «توزيع المهام القائم على قوائم الانتظار» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Web Scraping & Bots، انتقل إلى CoddyKit PRO. تتضمن دورة Web Scraping & Bots 4 دروس في المجموع.
ماذا ستتعلم في «توزيع المهام القائم على قوائم الانتظار»؟
تعلّم كيف تفصل قوائم انتظار الرسائل، مثل Redis وCelery، اكتشاف عناوين URL عن جلبها لتوسيع نطاق الكشط عبر عدد كبير من العاملين. تتمرن على Web Scraping & Bots مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Web Scraping & Bots؟
لا تُشترط خبرة سابقة. Web Scraping & Bots على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «توزيع المهام القائم على قوائم الانتظار»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Web Scraping & Bots هذا؟
نعم. كل درس في Web Scraping & Bots يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الكشط الموزّع باستخدام Scrapy
- Cloud Functions للكشط
- المراقبة والتسجيل
- توزيع المهام القائم على قوائم الانتظار