Pemilihan proxy round-robin di Python dengan itertools.cycle
Gunakan iterator berulang untuk pemilihan proxy yang dapat diprediksi dari kumpulan tetap, sambil menjaga pemilihan terpisah dari eksekusi permintaan dan kesehatan.
Untuk kumpulan tetap, pemilihan round-robin bisa sangat ringkas:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Ganti URL contoh dengan endpoint HTTP dari layanan Anda atau dari daftar proxy HTTP. Panggilan berturut-turut mengembalikan A, B, C, lalu A lagi. Gunakan nilai yang dipilih saat menyiapkan permintaan berikutnya. Membuat ulang iterator untuk setiap permintaan akan memulai ulang urutannya. Untuk Requests, teruskan endpoint yang dipilih ke permintaan.
Jika Anda lebih suka daftar, pindahkan item pertamanya ke belakang. pool.append(pool.pop()) menghapus item terakhir dan langsung mengembalikannya; item pertama tidak pernah berubah. Operasi antrean adalah pool.append(pool.pop(0)), meskipun menghapus dari depan menggeser elemen daftar lainnya.
Iterator memiliki tugas yang sengaja sederhana. Ia tidak memeriksa ketersediaan, tidak menghapus entri yang gagal, dan tidak menjamin jalan keluar publik yang berbeda. Beberapa endpoint dapat berbagi satu alamat luar.
Pertahankan kebijakan percobaan ulang dan pembaruan kumpulan di luar pemilih kecil ini. Iterator bersama juga membutuhkan model kepemilikan yang disengaja dalam kode konkuren agar endpoint terpilih tetap melekat pada operasi yang menerimanya.