pool-இன் map ஒரு நேரத்தில் ஒரு உருப்படியை பணியாளருக்கு அனுப்புகிறது. அந்த உருப்படியை URL மற்றும் தேர்ந்தெடுக்கப்பட்ட proxy உட்பட முழுமையான பணியாக்குங்கள், மாறும் உலகளாவிய பட்டியலிலிருந்து பணியாளர் தன் பாதையை ஊகிக்காதபடி.

வரையறுக்கப்பட்ட urls-க்கு, சரிபார்க்கப்பட்ட proxy URL-களின் காலியல்லாத பட்டியலை வழங்குங்கள். பொது HTTP வேட்பாளர்கள் HTTP proxy பட்டியல்-இல் கிடைக்கின்றன:

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 பயன்பாட்டால் வழங்கப்படுகின்றன. ஒருங்கிணைப்பாளர் முனைப் புள்ளிகளை மீளும் வரிசையில் ஒதுக்குகிறார்; ஒவ்வொரு பணியாளரும் ஒரு நிலையான இணையைப் பெறுகிறார். முடிவுகளை மீளவும் செய்வது பணியாளர் விதிவிலக்குகளையும் வெளிப்படுத்துகிறது.

ஐந்து பணியாளர்கள் செயலில் உள்ள பணிகளை வரம்பிடுகிறார்கள், proxy ஒன்றுக்கு செயலில் உள்ள பணிகளை அல்ல. பட்டியலில் இரண்டு முனைப் புள்ளிகள் இருந்தால், பல பணிகள் ஒரே முனைப் புள்ளியை ஒரே நேரத்தில் பயன்படுத்தலாம். தேவைப்படும்போது ஒவ்வொரு முனைப் புள்ளிக்கும் தனி திறன் விதியைச் சேர்க்கவும். ஒவ்வொரு முனைப் புள்ளி URL-க்கும் ஒரு செயலில் உள்ள பணிக்கு, ஒத்திசைவு வரிசை குத்தகை ஒவ்வொரு பதிவையும் முன்பதிவு செய்து திருப்பித் தரலாம்.

மீண்டும் முயற்சி அதே URL-க்கு புதிய வரம்புக்குட்பட்ட முயற்சியை உருவாக்க வேண்டும். பகிரப்பட்ட பட்டியலிலிருந்து பதிவுகளை நீக்கும் தொடர் மீள்முயற்சி அழைப்புகளைத் தவிர்க்கவும்: மற்றொரு பணியாளர் அதிலிருந்து தேர்ந்தெடுத்துக் கொண்டிருக்கலாம், மேலும் தீர்ந்த பட்டியலுக்கு இன்னும் தெளிவான முடிவு தேவை.

தொடர்புடைய கட்டுரைகள்