Python-da itertools.cycle bilan round-robin proksi tanlash
Ruxsat etilgan hovuzdan bashorat qilinadigan proksi tanlovi uchun takrorlanuvchi iteratordan foydalaning, tanlovni so'rov bajarilishi va salomatlikdan ajratib turing.
Qat'iy hovuz uchun round-robin tanlovi yoqimli qisqa bo'lishi mumkin:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Namuna URL-larni xizmatingizdan yoki HTTP proksi ro'yxatidan olingan HTTP oxirgi nuqtalari bilan almashtiring. Ketma-ket chaqiruvlar A, B, C, so'ng yana A qaytaradi. Keyingi so'rovni sozlashda tanlangan qiymatdan foydalaning. Iteratorni har bir so'rov uchun qayta yaratish ketma-ketlikni qaytadan boshlaydi. Requests uchun tanlangan oxirgi nuqtani so'rovga uzating.
Agar ro'yxatni afzal ko'rsangiz, uning birinchi elementini oxiriga o'tkazing. pool.append(pool.pop()) oxirgi elementni olib tashlaydi va darhol joyiga qaytaradi; birinchi element hech qachon o'zgarmaydi. Navbat amali pool.append(pool.pop(0)), ammo oldidan olib tashlash qolgan ro'yxat elementlarini siljitadi.
Iteratorning ataylab kamtar vazifasi bor. U mavjudlikni tekshirmaydi, muvaffaqiyatsiz yozuvlarni olib tashlamaydi va boshqa tashqi chiqishni kafolatlamaydi. Bir nechta oxirgi nuqta bitta tashqi manzilni bo'lishishi mumkin.
Qayta urinish siyosati va hovuz yangilanishlarini bu kichik tanlagichdan tashqarida saqlang. Umumiy iteratorga ham parallel kodda ataylab egalik modeli kerak, tanlangan oxirgi nuqta uni qabul qilgan amalga bog'lanib qolishi uchun.