Python Selenium如何实现始终保持10个Chrome实例并发执行任务
固定并发数任务调度实现方案
要实现始终保持10个任务同时运行、任务完成立即补入新任务的效果,直接使用Python标准库自带的线程池工具ThreadPoolExecutor即可,它原生支持固定最大并发数调度,不需要手动实现批次等待逻辑。
核心实现思路
ThreadPoolExecutor的max_workers参数指定最大同时运行的线程数为10- 一次性提交全部55个任务,框架会自动调度:有线程完成任务后立即分配新的待执行任务,全程维持最多10个任务并行
- 所有任务提交后调用
shutdown()即可等待全部任务执行完成
修改后完整代码
from selenium import webdriver import time from random import randrange from concurrent.futures import ThreadPoolExecutor def login_outlook(): chrome_option = webdriver.ChromeOptions() driver = webdriver.Chrome(executable_path='G:/chromedriver.exe', options=chrome_option) driver.set_window_rect(width=500, height=800) url = 'https://outlook.live.com/owa/' driver.get(url) driver.find_element_by_xpath('/html/body/header/div/aside/div/nav/ul/li[2]/a').click() time_wait = randrange(10, 30) time.sleep(time_wait) driver.close() if __name__ == '__main__': total_task = 55 max_concurrent = 10 # 初始化线程池,固定最大并发数 with ThreadPoolExecutor(max_workers=max_concurrent) as executor: # 提交全部55个任务 for _ in range(total_task): executor.submit(login_outlook) # 退出with块时会自动等待所有任务执行完成
代码说明
- 替换了原手动批次管理的逻辑,避免了原代码中重复执行任务的逻辑错误
- 全程自动维持最多10个任务并行,不存在批次等待的空窗期,执行效率远高于原批次方案
- 不需要手动管理线程的start、join逻辑,降低线程调度出错概率
内容的提问来源于stack exchange,提问作者anhhpvnu
相关产品推荐
相关产品推荐

