В настоящее время я работаю над проектом с веб-разбором и использованием селена вместе с phantomJS
.
Проект, который я написал, работает нормально, но проблема в том, что он очень медленный, поэтому я подумал, что могуввести в него многопоточность.
Я знаю, что селен не является многопоточным безопасным, и у каждого потока должен быть свой собственный веб-драйвер (просто для ясности).
Дело в том:
У меня есть массив с объектами, которые используются в URL-адресе (только его часть). В настоящее время я запускаю цикл для объектов и перехожу к драйверу с заданным xpath. , получить данные и инициализировать объект. Чтобы сделать это быстрее, я хочу создать 4 потока, где каждый поток должен:
Инициализировать новый веб-драйвер
Получить элемент из списка, который являетсяеще не используется.
Вызов различных функций для этого объекта
Я не уверен, как мне начать создавать несколько драйверов и ставить ихвсе вместе. Как я предполагаю создать темы, которые отвечают за работу? Я читал о функции переопределения запуска и о том, что в этом месте должна быть работа, которую должен выполнять поток, но как он должен знать следующий элемент из списка для использования?
Пока у меня есть следующее:
public static class MyThread implements Runnable {
private Objectx object
private WebDriver driver;
public MyThread(Objectx object){
this.object = object;
}
@Override
public void run() {
driver = driverSettings(driver);
driver.navigate().to("website" + object.getNumber + ".html");
function1(object);
function2(object);
}
}
И в основном методе:
ExecutorService executor = Executors.newFixedThreadPool(4);
Теперь у меня есть список объектов
private static List<Objectx> listOfObjects = new ArrayList<Objectx>();
Можно ли тогда использовать:
For (Objectx object : listOfObjects){
Runnabble object.getNumber() = new MyThread(object).start()
}
Или как мне добавить все объекты для создания списка работоспособности?