Как запустить сразу несколько процессов с разными прокси?

from seleniumwire import undetected_chromedriver as uc
import time
import multiprocessing

def get_whoer(proxy: str):
    try:
        ip, port, login, password = proxy.split(":")
        wire_options = {
            'proxy': {
                'https' : f'https://{login}:{password}@{ip}:{port}',
            }
        }
        options = uc.ChromeOptions()
        options.add_argument('--ignore-certificate-errors')
        driver = uc.Chrome(seleniumwire_options=wire_options, options=options)
        driver.maximize_window()
        driver.get("https://whoer.net/")
        time.sleep(1500)
        driver.quit()
    except Exception as e:
        print(f"Ошибка с прокси {proxy}: {e}")

if __name__ == '__main__':
    """ip:port:login:password"""
    proxy_list = list(map(str.rstrip, open('proxy.txt').readlines()))
    with multiprocessing.Pool(processes=2) as p:
        p.map(get_whoer, proxy_list)

65e56e1a93e0f147505497.png
В файле proxy.txt есть два прокси, один запускается, а для второго выводится ошибка, как пофиксить?
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Несколько вариантов:

- How-To: 4 Essential Parts of Multiprocessing in Python (не подходит для синхронизации доступа к файлу, который используется часто, так как может привести к снижению производительности):
from multiprocessing import Lock, Pool

lock = Lock()

with lock:
    driver = uc.Chrome(seleniumwire_options=wire_options, options=options)

- Multiprocessing Manager Example in Python (подходит только для синхронизации доступа к простым объектам, таким как списки):
from multiprocessing import Manager, Pool

manager = Manager()

def get_whoer(proxy: str):
    # ...

if __name__ == '__main__':
    """ip:port:login:password"""
    with Pool(processes=2) as p:
        p.map(get_whoer, proxy_list)

- How Python Keeps Your Queues Thread-Safe (подходит для синхронизации доступа к любым объектам, но код немного сложнее):
from queue import Queue
from multiprocessing import Pool

queue = Queue()

def get_whoer(proxy: str):
    # ...

if __name__ == '__main__':
    """ip:port:login:password"""
    proxy_list = list(map(str.rstrip, open('proxy.txt').readlines()))
    for proxy in proxy_list:
        queue.put(proxy)
    with Pool(processes=2) as p:
        p.map(get_whoer, range(len(proxy_list)))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы