ប្រមូលលទ្ធផលនីមួយៗពីសំណើប្រូកស៊ី 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 ក៏មានសារៈសំខាន់ដែរ។ ការកំណត់សម្រាប់អាងមួយមិនគួរត្រូវបានពិពណ៌នាថាជាកូតារន្ធដោតសកលតែមួយសម្រាប់គ្រប់ម៉ាស៊ីនទេ។