Rastreador multiproceso mientras se usa tor proxy

Estoy tratando de construir un rastreador de múltiples subprocesos que use proxies tor: Estoy usando lo siguiente para establecer la conexión tor:

from stem import Signal from stem.control import Controller controller = Controller.from_port(port=9151) def connectTor(): socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9150) socket.socket = socks.socksocket def renew_tor(): global request_headers request_headers = { "Accept-Language": "en-US,en;q=0.5", "User-Agent": random.choice(BROWSERS), "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Referer": "http://thewebsite2.com", "Connection": "close" } controller.authenticate() controller.signal(Signal.NEWNYM) 

Aquí es url fetcher:

 def get_soup(url): while True: try: connectTor() r = requests.Session() response = r.get(url, headers=request_headers) the_page = response.content.decode('utf-8',errors='ignore') the_soup = BeautifulSoup(the_page, 'html.parser') if "captcha" in the_page.lower(): print("flag condition matched while url: ", url) #print(the_page) renew_tor() else: return the_soup break except Exception as e: print ("Error while URL :", url, str(e)) 

Entonces estoy creando un trabajo de recuperación multiproceso:

 with futures.ThreadPoolExecutor(200) as executor: for url in zurls: future = executor.submit(fetchjob,url) 

entonces obtengo el siguiente error, que no veo cuando uso el multiprocesamiento:

  Socket connection failed (Socket error: 0x01: General SOCKS server failure) 

Agradecería Cualquier consejo para evitar el error de calcetines y mejorar el rendimiento del método de rastreo para que sea multiproceso.

Este es un ejemplo perfecto de por qué monkey socket.socket es malo.

Esto reemplaza el socket utilizado por todas las conexiones de socket (que es casi todo) con el socket SOCKS.

Cuando vas a conectarte al controlador más tarde, intenta usar el protocolo SOCKS para comunicarse en lugar de establecer una conexión directa.

Como ya está utilizando requests , sugeriría deshacerse de SocksiPy y el código socks.socket = socks.socksocket y usar la funcionalidad de proxy SOCKS integrada en las solicitudes:

 proxies = { 'http': 'socks5h://127.0.0.1:9050', 'https': 'socks5h://127.0.0.1:9050' } response = r.get(url, headers=request_headers, proxies=proxies)