Ֆիքսված լողավազանի համար round-robin ընտրությունը կարող է հաճելիորեն կարճ լինել.

from itertools import cycle

choices = cycle([
    "http://proxy-a.example:8080",
    "http://proxy-b.example:8080",
    "http://proxy-c.example:8080",
])

endpoint = next(choices)

Փոխարինեք օրինակելի URL-ները ձեր ծառայության կամ HTTP փրոքսիների ցանկի HTTP վերջնակետերով։ Հաջորդական կանչերը վերադարձնում են A, B, C, ապա կրկին A։ Օգտագործեք ընտրված արժեքը հաջորդ հարցումը կարգավորելիս։ Իտերատորը յուրաքանչյուր հարցման համար նորից ստեղծելը կվերագործարկի հաջորդականությունը։ Requests-ի համար ընտրված վերջնակետը փոխանցեք հարցմանը։

Եթե նախընտրում եք ցանկ, տեղափոխեք նրա առաջին տարրը վերջ։ pool.append(pool.pop())-ը հեռացնում է վերջին տարրը և անմիջապես վերադարձնում այն. առաջին տարրը երբեք չի փոխվում։ Հերթի գործողությունը pool.append(pool.pop(0))-ն է, թեև սկզբից հեռացնելը տեղաշարժում է ցանկի մնացած տարրերը։

Իտերատորն ունի միտումնավոր համեստ առաջադրանք։ Այն չի ստուգում հասանելիությունը, չի հեռացնում ձախողված գրառումները և չի երաշխավորում այլ հանրային ելք։ Մի քանի վերջնակետ կարող են կիսել մեկ արտաքին հասցե։

Պահեք կրկնափորձերի քաղաքականությունը և լողավազանի թարմացումները այս փոքրիկ ընտրիչից դուրս։ Համօգտագործվող իտերատորին նաև անհրաժեշտ է միտումնավոր սեփականության մոդել զուգահեռ կոդում, որպեսզի ընտրված վերջնակետը կապված մնա այն գործողությանը, որը ստացել է այն։

Առնչվող հոդվածներ