កំណត់ URL និង proxy សម្រាប់ការងារ Python ThreadPoolExecutor នីមួយៗ
កំណត់ proxy មុនពេលដាក់ស្នើការងារសំណើ Python ជំនួសឱ្យការទុកឱ្យកម្មករប្រណាំងប្រជែងលើស្ថានភាពជម្រើសរួមដែលអាចផ្លាស់ប្តូរ។
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 ដូចគ្នា។ ជៀសវាងការហៅព្យាយាមឡើងវិញបែបដដែលៗដែលដកធាតុចេញពីបញ្ជីរួម៖ កម្មករផ្សេងទៀតអាចកំពុងជ្រើសរើសពីវា ហើយបញ្ជីអស់ហើយនៅតែត្រូវការលទ្ធផលច្បាស់លាស់។