Pengikisan Web dan Pembangunan Bot · Pelajaran

Pengagihan Tugas Berasaskan Baris Gilir

Pelajari cara baris gilir mesej seperti Redis dan Celery menyahgandingkan penemuan URL daripada pengambilan supaya pengikisan boleh diskalakan merentas banyak pekerja.

Pelajaran 4 daripada 413 langkah

Pengagihan Tugas Berasaskan Baris Gilir ialah pelajaran Pengikisan Web dan Pembangunan Bot percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pengikisan Web dan Pembangunan Bot, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pengikisan Web dan Pembangunan Bot merangkumi sejumlah 4 pelajaran.

Batasan Penskalaan

Pengikis dalam satu proses dihadkan oleh CPU dan rangkaian sebuah mesin. Untuk meningkatkan skala, bahagikan kerja kepada banyak pekerja yang berjalan secara selari, mungkin pada pelayan yang berbeza.

Baris gilir tugas ialah penghubung yang mengagihkan kerja dengan selamat.

Pengeluar dan Pengguna

Pola baris gilir mempunyai dua peranan:

  • Pengeluar menemui URL dan menolak tugas ke dalam baris gilir.
  • Pengguna (pekerja) menarik tugas dan mengambil halaman.

Pengasingan ini membolehkan setiap pihak ditingkatkan skalanya secara berasingan.

Baris Gilir Berasaskan Redis

Senarai Redis menyediakan baris gilir yang ringkas dan pantas. Pengeluar menggunakan LPUSH untuk URL; pekerja menggunakan BRPOP untuk mengambilnya dan menunggu sehingga kerja tersedia.

import redis
r = redis.Redis()

# producer
r.lpush('urls', 'https://site.com/page1')

# worker
_, url = r.brpop('urls')
print('processing', url)

Mengapa Tidak Berkongsi Senarai Python

Senarai dalam memori hanya berfungsi dalam satu proses. Baris gilir Redis dikongsi merentas proses dan mesin, kekal tersedia jika pekerja terhenti, serta mengendalikan keserentakan secara atomik.

Memperkenalkan Celery

Celery ialah rangka kerja tugas lengkap yang dibina di atas broker seperti Redis. Anda mentakrifkan tugas sebagai fungsi dan memanggilnya secara tidak segerak; pekerja mengambilnya secara automatik.

from celery import Celery
app = Celery('scraper', broker='redis://localhost:6379/0')

@app.task
def scrape(url):
    return fetch_and_parse(url)

Mengagihkan Tugas

Memanggil .delay() memasukkan tugas ke dalam baris gilir dan terus mengembalikan kawalan. Pekerja yang menjalankan celery worker menggunakan dan melaksanakan tugas tersebut secara selari.

for url in discovered_urls:
    scrape.delay(url)

Percubaan Semula dan Kegagalan

Celery boleh mencuba semula tugas yang gagal secara automatik dengan jeda yang semakin meningkat, supaya ralat rangkaian sementara tidak menyebabkan URL hilang.

@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)

Membuang Pendua URL

Dalam perangkakan teragih, URL yang sama boleh ditemui dua kali. Gunakan set Redis sebagai penapis 'telah dilihat' supaya setiap halaman diambil sekali sahaja.

if r.sadd('seen', url):
    scrape.delay(url)  # sadd returns 1 only if newly added

Tekanan Balik dan Keserentakan

Laraskan keserentakan pekerja agar sepadan dengan kesopanan terhadap laman sasaran dan lebar jalur anda. Terlalu banyak pekerja membebankan laman; terlalu sedikit menyebabkan baris gilir tertunggak. Pantau panjang baris gilir untuk mencari keseimbangan.

# start 4 worker processes
// celery -A scraper worker --concurrency=4

Keputusan dan Penyimpanan

Pekerja hendaklah menulis data yang dihuraikan ke stor dikongsi, seperti pangkalan data atau storan objek, bukannya mengembalikannya melalui baris gilir. Baris gilir membawa tugas; stor data menyimpan keputusan.

Baris Gilir Keutamaan

Tidak semua URL sama penting. Halakan tugas segera, seperti indeks kategori yang membuka banyak halaman anak, ke baris gilir keutamaan tinggi supaya pekerja mengendalikannya sebelum halaman bernilai rendah.

scrape.apply_async(args=[url], priority=9)  # higher runs sooner

Semakan Ringkas

Uji pemahaman anda tentang pengagihan berasaskan baris gilir.

Imbas Kembali

Anda telah mempelajari cara meningkatkan skala pengikisan dengan baris gilir tugas: pola pengeluar/pengguna, baris gilir berasaskan Redis, tugas Celery dengan .delay(), percubaan semula automatik, pembuangan pendua URL menggunakan set Redis, pelarasan keserentakan dan penulisan keputusan ke storan dikongsi.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Pengagihan Tugas Berasaskan Baris Gilir” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pengikisan Web dan Pembangunan Bot, termasuk “Pengagihan Tugas Berasaskan Baris Gilir”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Pengikisan Web dan Pembangunan Bot merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengagihan Tugas Berasaskan Baris Gilir”?

Pelajari cara baris gilir mesej seperti Redis dan Celery menyahgandingkan penemuan URL daripada pengambilan supaya pengikisan boleh diskalakan merentas banyak pekerja. Anda berlatih Pengikisan Web dan Pembangunan Bot menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pengikisan Web dan Pembangunan Bot?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pengikisan Web dan Pembangunan Bot di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Pengagihan Tugas Berasaskan Baris Gilir” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pengikisan Web dan Pembangunan Bot ini?

Ya. Setiap pelajaran Pengikisan Web dan Pembangunan Bot menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pengikisan Teragih dengan Scrapy
  2. Cloud Functions untuk Pengikisan
  3. Pemantauan dan Pencatatan Log
  4. Pengagihan Tugas Berasaskan Baris Gilir
← Kembali ke Pengikisan Web dan Pembangunan Bot