您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python硒多处理

Python硒多处理

当使用多处理运行硒时,如何减少使用硒的执行时间

解决方案中的很多时间都花在为每个URL启动Webdriver上。您可以通过每个线程仅启动一次驱动程序来减少此时间:

(... skipped for brevity ...)

threadLocal = threading.local()

def get_driver():
  driver = getattr(threadLocal, 'driver', None)
  if driver is None:
    chromeOptions = webdriver.ChromeOptions()
    chromeOptions.add_argument("--headless")
    driver = webdriver.Chrome(chrome_options=chromeOptions)
    setattr(threadLocal, 'driver', driver)
  return driver


def get_title(url):
  driver = get_driver()
  driver.get(url)
  (...)

(...)

在我的系统上,这将时间从1m7s减少到仅24.895s,减少了约35%。要测试自己,请下载完整脚本

注意:ThreadPool使用受Python GIL约束的线程。如果大多数情况下任务是受I / O约束的,那没关系。根据您对抓取的结果进行的后处理,可能需要改用amultiprocessing.Pool。这将启动并行进程,这些进程作为一个整体不受GIL的约束。其余代码保持不变。

python 2022/1/1 18:41:56 有275人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶