ସମବର୍ତ୍ତୀ urllib3 ପ୍ରକ୍ସି ଅନୁରୋଧରୁ ପ୍ରତ୍ୟେକ ଫଳାଫଳ ସଂଗ୍ରହ କରନ୍ତୁ
କର୍ମୀ ଥ୍ରେଡ୍ ମଧ୍ୟରେ ଏକ ବିନ୍ୟାସିତ ProxyManager ଅଂଶୀଦାର କରନ୍ତୁ, ଏକ୍ଜିକ୍ୟୁଟରର ଫଳାଫଳ ଇଟେରେଟର ବ୍ୟବହାର କରନ୍ତୁ ଏବଂ ପୁଲ୍ ଧାରଣାକୁ ସଂଯୋଗ ସୀମାରୁ ଅଲଗା କରନ୍ତୁ।
କର୍ମୀ ପୁଲ୍ ସୃଷ୍ଟି କଲେ କଲରକୁ ଡାଉନଲୋଡ୍ ହୋଇଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ ମିଳେ ନାହିଁ। ଦାଖଲ କରାଯାଇଥିବା କାର୍ଯ୍ୟ ଫେରାଉଥିବା ମୂଲ୍ୟଗୁଡ଼ିକ ରଖନ୍ତୁ ଏବଂ ବ୍ୟବହାର କରନ୍ତୁ:
from concurrent.futures import ThreadPoolExecutor
import urllib3
manager = urllib3.ProxyManager(
'http://proxy.example:8080',
maxsize=4,
block=True,
)
def fetch(url):
response = manager.request(
'GET', url, timeout=urllib3.Timeout(connect=5, read=15),
)
return url, response.status, response.data
try:
with ThreadPoolExecutor(max_workers=4) as workers:
results = list(workers.map(fetch, urls))
finally:
manager.clear()ଏହି ଅଂଶ ସୀମିତ URL ତାଲିକା ଏବଂ ସାଧାରଣ ପ୍ରତିକ୍ରିୟା ଆକାର ଧରି ନେଇଛି। ପ୍ରକ୍ସି ପ୍ରମାଣୀକରଣ ବିନା ଅନୁମତିପ୍ରାପ୍ତ ସାର୍ବଜନୀନ-URL ଯାଞ୍ଚ ପାଇଁ HTTP ପ୍ରକ୍ସି ତାଲିକାରୁ ଏକ ପ୍ରାର୍ଥୀ ପରିଚାଳକର ଉଦାହରଣ HTTP ଏଣ୍ଡପଏଣ୍ଟକୁ ବଦଳାଇ ପାରିବ। ପ୍ରତ୍ୟେକ ଫଳାଫଳରେ ଏହାର URL ଥାଏ ଯାହାଫଳରେ କଲର ସ୍ଥିତି ଏବଂ ବଡିକୁ ସଠିକ୍ ଅନୁରୋଧ ସହିତ ଯୋଡ଼ିପାରିବ। map ଇନପୁଟ୍ କ୍ରମରେ ଫଳାଫଳ ଫେରାଏ; କର୍ମୀରେ ଏକ ବ୍ୟତିକ୍ରମ ସେହି ଫଳାଫଳ ନେବା ସମୟରେ ଉଠାଯାଏ।
ବିନ୍ୟାସିତ ProxyManager ଅନୁରୋଧଗୁଡ଼ିକ ପାଇଁ ସଂଯୋଗ ପୁଲିଂ ଧାରଣ କରେ। ଏଠାରେ ବ୍ୟବହୃତ ଡିଫଲ୍ଟ ପ୍ରିଲୋଡେଡ୍ ପ୍ରତିକ୍ରିୟା ମୋଡ୍ ସହିତ, urllib3 ବଡି ପଢ଼େ ଏବଂ ସଂଯୋଗକୁ ଏହାର ପୁଲକୁ ଫେରାଏ। ଏକ ଷ୍ଟ୍ରିମିଂ ସଂସ୍କରଣକୁ ସ୍ପଷ୍ଟ ବ୍ୟବହାର ଏବଂ ସଂଯୋଗ ମୁକ୍ତି ଆବଶ୍ୟକ ହେବ।
maxsize ସାଧାରଣତଃ ରଖାଯାଇଥିବା ପୁନଃବ୍ୟବହାରଯୋଗ୍ୟ ସଂଯୋଗ ନିୟନ୍ତ୍ରଣ କରେ, ପ୍ରତ୍ୟେକ ଖୋଲା ସକେଟରେ କଠିନ ସୀମା ନୁହେଁ। block=True ସମ୍ପୃକ୍ତ ପୁଲ ଆଚରଣ ପରିବର୍ତ୍ତନ କରେ ଯାହାଫଳରେ କଲରମାନେ ସେହି ପୁଲର ସୀମା ଉପରେ ଅତିରିକ୍ତ ଖୋଲିବା ପରିବର୍ତ୍ତେ ମୁକ୍ତ ସଂଯୋଗ ପାଇଁ ଅପେକ୍ଷା କରନ୍ତି।
ଏହି ଉଦାହରଣରେ କର୍ମୀ ସଂଖ୍ୟା ସମବର୍ତ୍ତୀ କଲ ସୀମିତ କରେ। ଅନେକ ଗନ୍ତବ୍ୟ ସ୍ଥାନ ସହିତ, ପୁଲ ବିନ୍ୟାସ ଏବଂ HTTPS ଟନେଲ ପାଇଁ ବ୍ୟବହୃତ ମାର୍ଗ ମଧ୍ୟ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ; ଗୋଟିଏ ପୁଲର ସେଟିଂକୁ ପ୍ରତ୍ୟେକ ହୋଷ୍ଟ ପାଇଁ ଏକ ବୈଶ୍ୱିକ ସକେଟ କୋଟା ଭାବରେ ବର୍ଣ୍ଣନା କରାଯିବା ଉଚିତ୍ ନୁହେଁ।