并发和Sellenium-多处理与多线程

时间:2018-10-02 23:27:32

标签: python python-3.x multithreading selenium concurrency

我有一个使用大量无头Selenium自动化和循环HTTP请求的脚本。我为此脚本实现线程/工作人员队列非常重要。我已经做到了。

我的问题是:我应该使用多线程还是多进程?线程还是ProcessPool?我知道:

”如果您的程序花更多时间等待文件读取或网络请求或任何类型的I / O任务,则它是I / O瓶颈,您应该考虑使用线程来加快速度。 “

和...

“”如果您的程序在大型数据集上花费更多的时间执行基于CPU的任务,那么这将成为CPU瓶颈。在这种情况下,您最好使用多个进程来加速程序。单线程Python程序可能会更快地解决CPU受限的问题,它可能取决于未知因素,例如问题集的大小等。”

涉及硒的情况是哪种?我是否认为与Selenium相关的所有CPU绑定任务都将通过Web驱动程序单独执行,还是我的脚本将从多个进程中受益?

或更简而言之:当我在脚本中使用Selenium时,Web驱动程序是否限于1个CPU内核,而该脚本线程在同一内核上运行?

1 个答案:

答案 0 :(得分:2)

Web驱动程序只是一个驱动程序,如果没有汽车,驱动程序将无法驾驶汽车。

例如,当您使用ChromeDriver与浏览器通信时,您正在启动Chrome。 ChromeDriver本身不进行计算,但Chrome进行计算。

因此需要澄清的是,webdriver是用于操纵浏览器的工具,但它本身不是浏览器。

基于此,绝对应该选择线程池而不是进程池,因为这肯定是python脚本中的一个I / O绑定问题。