线程时需要文件锁定Selenium Webdriver吗?

时间:2016-03-16 13:54:27

标签: python multithreading selenium web-scraping

我有很多线程像这样启动phantomJS或Chromedriver:

 Driver= webdriver.PhantomJS('C:\phantomjs.exe',desired_capabilities=dcap, service_args=service_args)

Driver= webdriver.Chrome(executable_path='C:/chromedriver.exe', chrome_options=chrome_options)

这可能看起来像是一个愚蠢的问题,但我正在尝试追踪线程在不经常发生并且很少失败的原因,这是我能看到的唯一一点代码而没有太多的异常处理。

如果我在同一时间运行100多个线程可能导致问题?如果我真的在修改某些内容,我只会使用文件锁定。当多个线程只是为webdriver使用相同的文件时,没有必要......对吗?

1 个答案:

答案 0 :(得分:1)

根据:Is Selenium WebDriver thread safe?

  

WebDriver不是线程安全的。话虽如此,如果你可以序列化   访问底层驱动程序实例,您可以共享一个引用   多个线程。这是不可取的。你/可以/另一方面   hand为每个线程实例化一个WebDriver实例。

...这表明你的任务越多并发,你对失败的容忍度就越低,你就越需要坚持每个线程的单个驱动程序实例。我不认为文件锁定在这里会有用。

另一个问题是在一台计算机上运行浏览器实例的成本相对较高,因此您很幸运能够在不降低性能的情况下运行10个实例/线程。

这种安排可以很好地工作,但你永远不能同时运行100多个线程(无论如何在实践中都不可能这样做)。 5或10应该没问题,我怀疑你的吞吐量会少一些。

如果您的需求大于此,那么您最好使用Selenium Grid和多个节点。