为了账号安全,请及时绑定邮箱和手机立即绑定

尝试一次只运行 5 个 selenium webdriver 线程,重复直到运行 200 个线程

尝试一次只运行 5 个 selenium webdriver 线程,重复直到运行 200 个线程

一只甜甜圈 2023-02-23 16:00:14
我试图让 5 个 selenium webdriver 线程在给定时间运行,等待这些线程完成,然后再打开 5 个,重复直到运行 ~200 个线程。我的代码可以打开 5 个线程并等待它们完成后再继续,但是当我尝试将其放入循环并将目标设置为 10 个线程时(应该是运行并完成的 5 个线程,然后是运行并完成的 5 个线程之后),它同时打开所有 10 个线程。我担心如果我将目标提高到 200 个线程,它会使计算机超载。基于对此处提出的另一个问题的回答(我一辈子都找不到),我从使用 Thread 切换到 ExecutorService,它用于了解 5 个线程何时完成。我不是很有经验,所以除了 for/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 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

只要 listIndex < 10,此规则i < 5 || listIndex < LISTSPERSESSION就会评估。true

将 OR 切换为 AND:i < 5 && listIndex < LISTSPERSESSION


查看完整回答
反对 回复 2023-02-23
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

For 循环条件应该在大括号中并且添加 && 而不是 || 操作员

(i < 5 && listIndex < LISTSPERSESSION)


查看完整回答
反对 回复 2023-02-23
  • 2 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信