map នៃអាងផ្តល់ធាតុមួយទៅកម្មករក្នុងពេលតែមួយ។ ធ្វើឱ្យធាតុនោះជាការងារពេញលេញ រួមទាំង URL និង proxy ដែលបានជ្រើស ដើម្បីកុំឱ្យកម្មករទាញយកផ្លូវរបស់ខ្លួនពីបញ្ជីសកលដែលផ្លាស់ប្តូរ។

សម្រាប់ urls កំណត់ សូមផ្តល់បញ្ជី URL proxy ដែលបានផ្ទៀងផ្ទាត់មិនទទេ។ បេក្ខជន HTTP សាធារណៈមាននៅក្នុង បញ្ជី proxy 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 ត្រូវបានផ្តល់ដោយកម្មវិធី។ អ្នកសម្របសម្រួលកំណត់ចំណុចបញ្ចប់តាមលំដាប់ដដែលៗ; កម្មករនីមួយៗទទួលបានគូថេរមួយ។ ការធ្វើម្តងទៀតលើលទ្ធផលក៏បង្ហាញករណីលើកលែងរបស់កម្មករផងដែរ។

កម្មករប្រាំដាក់កំណត់ការងារសកម្ម មិនមែនការងារសកម្មក្នុងមួយ proxy ទេ។ ប្រសិនបើបញ្ជីមានចំណុចបញ្ចប់ពីរ ការងារជាច្រើនអាចប្រើចំណុចបញ្ចប់តែមួយក្នុងពេលតែមួយ។ បន្ថែមច្បាប់សមត្ថភាពដាច់ដោយឡែកក្នុងមួយចំណុចបញ្ចប់នៅពេលចាំបាច់។ សម្រាប់ការងារសកម្មមួយក្នុងមួយ URL ចំណុចបញ្ចប់ ការជួលជួរដេកសមកាលកម្ម អាចកក់ និងត្រឡប់ធាតុនីមួយៗ។

ការព្យាយាមឡើងវិញគួរបង្កើតការព្យាយាមមានដែនកំណត់ថ្មីសម្រាប់ URL ដូចគ្នា។ ជៀសវាងការហៅព្យាយាមឡើងវិញបែបដដែលៗដែលដកធាតុចេញពីបញ្ជីរួម៖ កម្មករផ្សេងទៀតអាចកំពុងជ្រើសរើសពីវា ហើយបញ្ជីអស់ហើយនៅតែត្រូវការលទ្ធផលច្បាស់លាស់។

អត្ថបទពាក់ព័ន្ធ