用于使用硒进行网络划分的线程或多处理

时间:2017-07-01 11:49:43

标签: multithreading python-3.x selenium-webdriver multiprocessing

我需要使用selenium来进行堆javascript生成的网页的抓取工作。我可以一次打开几个webdriver实例,并使用队列将网站传递给实例。

虽然可以通过多种方式完成。我已经尝试了多线程模块中的线程模块和池和进程方式。

所有工作都会很快完成工作。

这让我想知道:在这样的情况下哪个模块是普通的?

1 个答案:

答案 0 :(得分:1)

CPython中用于在进程线程之间进行选择的主要因素取决于您的工作负载类型。

如果你有一个I / O绑定类型的工作负载,你的大部分应用程序时间花在等待数据进入或出去,那么你最好的选择是使用线程。

相反,如果您的应用程序花费大量时间使用CPU,那么进程就是您的首选工具。

这是因为在CPython(最常用的解释器)中,一次只有一个线程可以使用CPU核心。有关此限制的更多信息,请阅读有关全局解释器锁(GIL)的信息。

使用通常被忽视的流程还有另一个优势:流程可以实现更大程度的隔离。这意味着如果你有一些不稳定的代码(在你的情况下可能是抓取逻辑)可能会挂起或崩溃严重,将它封装在一个单独的进程中允许你的服务检测到异常并恢复(杀死进程并重新启动它)。