Попытка запустить только 5 потоков селенового вебдрайвера одновременно, повторяя, пока не будет запущено 200 потоков - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь запустить 5 потоков веб-драйвера selenium в указанное время, дождаться окончания этих потоков, затем открыть еще 5, повторяя, пока не будет запущено ~ 200 потоков. Мой код может открыть 5 потоков и ждать, пока они не закончатся, прежде чем двигаться дальше, но когда я пытаюсь поместить это в цикл и установить цель на 10 потоков (должно быть 5 потоков, которые работают и заканчивают, затем 5 потоков, которые работают и заканчивают впоследствии), он открывает все 10 потоков одновременно. Я обеспокоен тем, что если я увеличу цель до 200 потоков, это приведет к перегрузке компьютера.

Основываясь на ответе на другой вопрос, заданный здесь (не могу найти его на всю жизнь), я переключился с использования Thread на ExecutorService, который работал, чтобы знать, когда 5 потоков завершены. Я не очень опытный, поэтому, за исключением циклов / do-while / while (которые я все пробовал), я не знаю, какие еще циклы я мог бы попробовать.

            LISTSPERSESSION = 10;
            ExecutorService es = Executors.newCachedThreadPool();
            int listIndex = 0;
            do {
                boolean finished = false;
                //Goes until 5 lists are searched OR the number of lists per session is hit
                for(int i=0; i < 5 || listIndex < LISTSPERSESSION; i++) {
                    listIndex++;
                    int index = i;
                    es.execute(() -> v.searchDatabase(index));
                }
                es.shutdown();

                try {
                    finished = es.awaitTermination(10, TimeUnit.MINUTES);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                if(finished == true) {
                    if(listIndex == LISTSPERSESSION) {
                        break;
                    } else {
                        continue;
                    }
                }
            } while(false);

Открывает все 10 потоков одновременно, а не 5 одновременно.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

условие цикла должно быть в скобках, а также добавить && вместо ||оператор

(i <5 && listIndex <LISTSPERSESSION) </p>

0 голосов
/ 27 июня 2019

Это правило i < 5 || listIndex < LISTSPERSESSION будет оцениваться до true, пока listIndex <10. </p>

Переключите ИЛИ на AND: i < 5 && listIndex < LISTSPERSESSION.

...