Python ਵਿੱਚ itertools.cycle ਨਾਲ round-robin ਪ੍ਰੌਕਸੀ ਚੋਣ
ਸਥਿਰ ਪੂਲ ਤੋਂ ਅਨੁਮਾਨ ਲਗਾਉਣ ਯੋਗ ਪ੍ਰੌਕਸੀ ਚੋਣ ਲਈ ਦੁਹਰਾਉਣ ਵਾਲਾ ਇਟਰੇਟਰ ਵਰਤੋ, ਚੋਣ ਨੂੰ ਬੇਨਤੀ ਚੱਲਣ ਅਤੇ ਸਿਹਤ ਤੋਂ ਵੱਖ ਰੱਖੋ।
ਸਥਿਰ ਪੂਲ ਲਈ 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)) ਹੈ, ਹਾਲਾਂਕਿ ਅੱਗਿਉਂ ਹਟਾਉਣ ਨਾਲ ਬਾਕੀ ਸੂਚੀ ਤੱਤ ਖਿਸਕਦੇ ਹਨ।
ਇਟਰੇਟਰ ਦਾ ਕੰਮ ਜਾਣ-ਬੁੱਝ ਕੇ ਸੀਮਿਤ ਹੈ। ਇਹ ਉਪਲਬਧਤਾ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰਦਾ, ਅਸਫਲ ਐਂਟਰੀਆਂ ਨਹੀਂ ਹਟਾਉਂਦਾ ਅਤੇ ਵੱਖਰੇ ਜਨਤਕ ਨਿਕਾਸ ਦੀ ਗਰੰਟੀ ਨਹੀਂ ਦਿੰਦਾ। ਕਈ ਐਂਡਪੌਇੰਟ ਇੱਕੋ ਬਾਹਰੀ ਪਤਾ ਸਾਂਝਾ ਕਰ ਸਕਦੇ ਹਨ।
ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਨੀਤੀ ਅਤੇ ਪੂਲ ਅੱਪਡੇਟ ਇਸ ਛੋਟੇ ਚੋਣਕਾਰ ਤੋਂ ਬਾਹਰ ਰੱਖੋ। ਸਾਂਝੇ ਇਟਰੇਟਰ ਨੂੰ ਸਮਕਾਲੀ ਕੋਡ ਵਿੱਚ ਜਾਣ-ਬੁੱਝ ਕੇ ਮਾਲਕੀ ਮਾਡਲ ਦੀ ਵੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਜੋ ਚੁਣਿਆ ਐਂਡਪੌਇੰਟ ਉਸ ਕਾਰਵਾਈ ਨਾਲ ਜੁੜਿਆ ਰਹੇ ਜਿਸਨੇ ਇਸਨੂੰ ਪ੍ਰਾਪਤ ਕੀਤਾ।