ପ୍ରତ୍ୟେକ Python ThreadPoolExecutor କାର୍ଯ୍ୟକୁ URL ଏବଂ ପ୍ରକ୍ସି ନ୍ୟସ୍ତ କରନ୍ତୁ
Python ଅନୁରୋଧ କାର୍ଯ୍ୟ ଦାଖଲ କରିବା ପୂର୍ବରୁ ପ୍ରକ୍ସି ନ୍ୟସ୍ତ କରନ୍ତୁ, କର୍ମଚାରୀମାନଙ୍କୁ ଅଂଶୀଦାର ପରିବର୍ତ୍ତନଶୀଳ ଚୟନ ସ୍ଥିତି ପାଇଁ ପ୍ରତିଯୋଗିତା କରିବାକୁ ଦେବା ପରିବର୍ତ୍ତେ।
ପୁଲର map ଏକ ସମୟରେ ଗୋଟିଏ ଆଇଟମ କର୍ମଚାରୀକୁ ଦିଏ। ସେହି ଆଇଟମକୁ URL ଏବଂ ମନୋନୀତ ପ୍ରକ୍ସି ସହିତ ସମ୍ପୂର୍ଣ୍ଣ କାର୍ଯ୍ୟ କରନ୍ତୁ, ଯାହାଫଳରେ କର୍ମଚାରୀ ପରିବର୍ତ୍ତନଶୀଳ ବିଶ୍ୱ ସୂଚୀରୁ ନିଜର ପଥ ଅନୁମାନ ନ କରେ।
ସୀମିତ urls ପାଇଁ, ଯାଞ୍ଚିତ ପ୍ରକ୍ସି URLର ଖାଲି ନଥିବା ସୂଚୀ ଦିଅନ୍ତୁ। ସାର୍ବଜନୀନ HTTP ପ୍ରାର୍ଥୀମାନେ HTTP ପ୍ରକ୍ସି ସୂଚୀ ରେ ଉପଲବ୍ଧ:
from concurrent.futures import ThreadPoolExecutor
from itertools import cycle
import requests
def fetch(job):
url, proxy_url = job
proxies = {"http": proxy_url, "https": proxy_url}
with requests.get(url, proxies=proxies, timeout=(5, 15)) as response:
response.raise_for_status()
return url, response.text
if not proxy_urls:
raise ValueError("No proxy endpoints were supplied")
jobs = zip(urls, cycle(proxy_urls))
with ThreadPoolExecutor(max_workers=5) as executor:
for url, body in executor.map(fetch, jobs):
handle_result(url, body)urls, proxy_urls ଏବଂ handle_result ଆପ୍ଲିକେସନ ଦ୍ୱାରା ପ୍ରଦାନ କରାଯାଏ। ସମନ୍ୱୟକ ଏଣ୍ଡପଏଣ୍ଟଗୁଡ଼ିକୁ ପୁନରାବୃତ୍ତି କ୍ରମରେ ନ୍ୟସ୍ତ କରେ; ପ୍ରତ୍ୟେକ କର୍ମଚାରୀ ଏକ ସ୍ଥିର ଯୋଡ଼ି ପାଏ। ଫଳାଫଳଗୁଡ଼ିକୁ ପୁନରାବୃତ୍ତି କଲେ କର୍ମଚାରୀଙ୍କ ବ୍ୟତିକ୍ରମ ମଧ୍ୟ ପ୍ରକାଶ ପାଏ।
ପାଞ୍ଚ କର୍ମଚାରୀ ସକ୍ରିୟ କାର୍ଯ୍ୟ ସୀମିତ କରନ୍ତି, ପ୍ରତି ପ୍ରକ୍ସି ସକ୍ରିୟ କାର୍ଯ୍ୟ ନୁହେଁ। ଯଦି ସୂଚୀରେ ଦୁଇଟି ଏଣ୍ଡପଏଣ୍ଟ ଅଛି, ଅନେକ କାର୍ଯ୍ୟ ଏକ ସମୟରେ ସେହି ଏଣ୍ଡପଏଣ୍ଟ ବ୍ୟବହାର କରିପାରିବେ। ଆବଶ୍ୟକ ହେଲେ ପ୍ରତି ଏଣ୍ଡପଏଣ୍ଟ ପାଇଁ ପୃଥକ କ୍ଷମତା ନିୟମ ଯୋଡ଼ନ୍ତୁ। ପ୍ରତି ଏଣ୍ଡପଏଣ୍ଟ URL ପାଇଁ ଗୋଟିଏ ସକ୍ରିୟ କାର୍ଯ୍ୟ ପାଇଁ, ସିଙ୍କ୍ରୋନାଇଜଡ୍ କ୍ୟୁ ଇଜାରା ପ୍ରତ୍ୟେକ ଏଣ୍ଟ୍ରି ଆରକ୍ଷିତ କରି ଫେରାଇ ପାରିବ।
ପୁନଃପ୍ରୟାସ ସେହି URL ପାଇଁ ନୂଆ ସୀମିତ ପ୍ରୟାସ ସୃଷ୍ଟି କରିବା ଉଚିତ। ଅଂଶୀଦାର ସୂଚୀରୁ ଏଣ୍ଟ୍ରି ଅପସାରଣ କରୁଥିବା ପୁନରାବୃତ୍ତି ପୁନଃପ୍ରୟାସ କଲ୍ ଏଡ଼ାନ୍ତୁ: ଅନ୍ୟ ଜଣେ କର୍ମଚାରୀ ସେଥିରୁ ଚୟନ କରୁଥାଇପାରେ, ଏବଂ ଶେଷ ହୋଇଥିବା ସୂଚୀକୁ ତଥାପି ସ୍ପଷ୍ଟ ଫଳାଫଳ ଦରକାର।