我用 python (3.6) 和 selenium、firefox 网络驱动程序创建了一个网络抓取工具。我已经设置了一个 cronjob 每隔几分钟运行一次这个爬虫,它似乎都在工作,除了随着时间的推移(比如几天),我的 Ubuntu VPS(8GB RAM,Ubuntu 18.04.4)上的内存填满了起来然后崩溃。
当我检查 HTOP 时,我可以看到很多(如数百个)firefox 进程,如“/usr/lib/firefox -marionette”和“/usr/lib/firefox -contentproc”,全部占用大约 3 或每个 4mb 的内存。
我放了一个
browser.stop_client()
浏览器.close()
浏览器.quit()
在每个使用网络驱动程序的函数中,但我怀疑脚本有时会在遇到错误时让网络驱动程序保持打开状态,而不是正确关闭它们,这些 firefox 进程只会累积直到我的系统崩溃。
我正在努力寻找这个问题的根本原因,但与此同时,有没有一种快速的方法可以终止/清理所有这些进程?
例如杀死所有匹配进程(超过 10 分钟)的 cronjob?
谢谢。
最佳答案
I suspect the script is sometimes leaving web drivers open when it hits an error, and not closing them properly
这很可能是问题所在。我们使用 try except finally 解决了这个问题 block 。
browser = webdriver.Firefox()
try:
# Your code
except Exception as e:
# Log or print error
finally:
browser.close()
browser.quit()
如果您仍然遇到同样的问题,您可以按照此 answer 强制终止驱动程序,或者这个 answer对于 Ubuntu。
import os
os.system("taskkill /im geckodriver.exe /f")
关于python - 如何清理所有 Selenium Firefox 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61626571/