You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3 Selenium多浏览器并行异常:进程启动但函数未正确执行

Selenium多进程执行失败问题解决

问题核心原因

你的代码存在两个关键问题,导致launch_browser函数无法按预期执行:

  • apply_async的参数传递格式错误
  • 跨进程传递Selenium Driver对象的设计缺陷

分步修正方案

1. 修正apply_async参数传递格式

pool.apply_async的第二个参数要求是参数元组,直接传入driver会被拆解为多个零散参数(如果driver是可迭代对象),正确写法是将参数打包成元组:

pool.apply_async(launcher.launch_browser, (driver,))

2. 避免跨进程传递Driver对象

Selenium的Driver是和浏览器进程绑定的状态对象,无法在多进程间正确序列化传递。必须在子进程内部创建Driver,而非主进程创建后传入。

调整后的代码示例:

from multiprocessing import Pool
import launcher

def worker():
    # 子进程内部独立创建driver
    driver = create_driver()  # 确保create_driver可在子进程中正常调用
    launcher.launch_browser(driver)
    # 执行完逻辑后关闭driver释放资源
    driver.quit()

if __name__ == "__main__":
    pool = Pool(processes=3)  # 根据需求指定并发进程数
    for _ in range(3):
        pool.apply_async(worker)
    # 必须关闭进程池并等待所有子进程执行完成
    pool.close()
    pool.join()

3. 确保主进程等待子进程执行完毕

如果主进程在子进程完成前提前退出,子进程会被强制终止,因此必须调用pool.close()停止接收新任务,再用pool.join()等待所有子进程执行结束。

额外注意事项

  • 确保launch_browser函数内部逻辑不依赖主进程的全局状态,所有资源都在子进程内初始化
  • 部分浏览器Driver需要添加特定参数(如Chrome的--no-sandbox),避免多进程环境下的权限或启动失败问题

内容的提问来源于stack exchange,提问作者jacksc0tt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:15:44