大家好!我已经遇到这个问题一个星期了,但我认为我无法解决,而且我也看不到任何基于在线文章的解决方案。希望有人可以在这里帮助我...
我的情况: 我需要在一页中几乎每秒钟更改一次的6个不同表中监视价格。到一天结束时,我将关闭浏览器(按X按钮)并终止脚本(按Control + C),然后在早上再次运行并让它运行一整天。该脚本是用python编写的,并使用硒来读取价格。我使用的浏览器是Chrome。我的操作系统是Windows 2008 R2;硒版本为3.14.1
这是代码的一部分。只是使用 find_elements_by_id 在1秒间隔的无限循环内简单地读取表中的价格。
While True:
close1 = float(browser.find_element_by_id('bnaBox1').find_elements_by_id('lastprc1')[0].text.encode('ascii','ignore'))
close2 = float(browser.find_element_by_id('bnaBox2').find_elements_by_id('lastprc2')[0].text.encode('ascii','ignore'))
close3 = float(browser.find_element_by_id('bnaBox3').find_elements_by_id('lastprc3')[0].text.encode('ascii','ignore'))
close4 = float(browser.find_element_by_id('bnaBox4').find_elements_by_id('lastprc4')[0].text.encode('ascii','ignore'))
close5 = float(browser.find_element_by_id('bnaBox5').find_elements_by_id('lastprc5')[0].text.encode('ascii','ignore'))
close6 = float(browser.find_element_by_id('bnaBox6').find_elements_by_id('lastprc6')[0].text.encode('ascii','ignore'))
time.sleep(1)
...
在运行的前几分钟,脚本消耗的CPU量最少(大约20%到30%),但在几分钟后,消耗量却缓慢上升到100%!除了脚本之外,计算机中没有其他进程在运行。
我到目前为止已完成的问题排查(它们都无法解决我的问题)
该程序仅在表中获取值,但我怀疑在脚本运行时,在后台某处会堆积不必要的数据,从而导致CPU崩溃。
希望有人可以帮助我找出导致CPU出现此问题的原因并解决问题。
答案 0 :(得分:1)
很难猜测 100%CPU使用率的确切原因,而又没有对代码块的任何可见性,尤其是 WebDriver 配置。因此,答案将很大程度上基于通用准则,如下所示:
driver.quit()
方法内调用tearDown(){}
,以优雅地关闭和销毁 WebDriver 和 Web Client 实例。
几个有用的ChromeOptions()
及其用法如下:
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
使用time.sleep(1)
形式的硬编码睡眠是很大的否。
@Test
。答案 1 :(得分:0)
您是否尝试过将内存释放到循环中?
也许可以通过选择值(是否是循环列表?)然后将这些变量重置为None
来避免过多的内存消耗。
...
while True:
...
close1 = close2 = close3 = close4 = close5 = close6 = None
...
您也可以尝试强制垃圾收集器:
import gc
while True:
...
gc.collect()
如果您认为原因可能是脚本,则检测该问题的另一种解决方案可能是使Chrome浏览器执行remote debug并调试页面。
--remote-debugging-port=9222
我希望其中一些可以帮助您。