প্ৰতিটো 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 ৰ বাবে এটা নতুন সীমিত চেষ্টা সৃষ্টি কৰা উচিত। শ্বেয়াৰ কৰা তালিকাৰ পৰা প্ৰৱিষ্টি আঁতৰোৱা পুনৰাবৃত্তিমূলক পুনৰ চেষ্টা কলৰ পৰা আঁতৰি থাকক: আন এজন শ্ৰমিকে তাৰ পৰা নিৰ্বাচন কৰি থাকিব পাৰে, আৰু নিঃশেষিত তালিকাৰ এতিয়াও এটা স্পষ্ট পৰিণতি প্ৰয়োজন।