我想弄清楚如何使用代理和多線程。Python urllib3和代理
此代碼:
requester = urllib3.PoolManager(maxsize = 10, headers = self.headers)
thread_pool = workerpool.WorkerPool()
thread_pool.map(grab_wrapper, [item['link'] for item in products])
thread_pool.shutdown()
thread_pool.wait()
在
grab_wrapper
requested_page = requester.request('GET', url, assert_same_host = False, headers = self.headers)
頁眉包括
然後:接受,接收字符集,接受編碼,接受語言和用戶代理
但是這在生產中不起作用,因爲它必須通過代理,不需要授權。
我嘗試了不同的事情(通過proxies
請求,在標題等)。唯一可行的事情是這樣的:
requester = urllib3.proxy_from_url(self._PROXY_URL, maxsize = 7, headers = self.headers)
thread_pool = workerpool.WorkerPool(size = 10)
thread_pool.map(grab_wrapper, [item['link'] for item in products])
thread_pool.shutdown()
thread_pool.wait()
現在,當我運行該程序,就會使10個請求(10個線程),然後...停止。沒有錯誤,沒有任何警告。這是我可以繞過代理服務器的唯一方式,但它似乎不可能同時使用proxy_from_url
和WorkerPool
。
任何想法如何將這兩個結合到一個工作代碼?我寧願避免它改寫成零碎等由於時間限制
問候
您是否嘗試過爲每個線程創建一個(代理)請求者(每個請求者僅從一個線程發出請求)?免責聲明:我不直接使用'urllib3'。 – jfs 2013-03-06 22:13:17