我需要使用Selenium进行抓取工作,其中包含堆JavaScript生成的网页。我可以一次打开 Web 驱动程序的多个实例,并使用队列将网站传递给实例。
不过,它可以通过多种方式完成。我已经尝试了线程模块以及多处理模块中的池和进程方式。
所有工作都将很快完成工作。
这让我想知道:在这种情况下,通用哪个模块更受欢迎?
CPython 中在进程线程之间进行选择的主要因素取决于您的工作负载类型。
如果您有 I/O 绑定类型的工作负载,其中大部分应用程序时间都花在等待数据传入或传出上,那么您的最佳选择是使用 Threads。
相反,如果您的应用程序花费大量时间使用 CPU,那么进程是您的首选工具。
这是因为在CPython(最常用的解释器(中,一次只有一个线程可以使用CPU内核。有关此限制的更多信息,请阅读全局解释器锁 (GIL(。
使用进程时还有另一个通常被忽视的优点:进程允许实现更大程度的隔离。这意味着,如果您有一些不稳定的代码(在您的情况下可能是抓取逻辑(可能会严重挂起或崩溃,则将其封装在单独的进程中可以让您的服务检测异常并恢复(终止进程并重新启动它(。