Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在webdriver中测试Firefox与Chrome的内存消耗_Python_Google Chrome_Firefox_Selenium - Fatal编程技术网

Python 在webdriver中测试Firefox与Chrome的内存消耗

Python 在webdriver中测试Firefox与Chrome的内存消耗,python,google-chrome,firefox,selenium,Python,Google Chrome,Firefox,Selenium,我正在尝试最大化我可以在我的计算机上运行脚本的浏览器数量。当我启动webdriver时,如何计算每个Chrome或Firefox进程占用的内存量。例如: from selenium import webdriver driver = webdriver.Chrome() driver.get('www.yahoo.com') # - or - # from selenium import webdriver driver = webdriver.Firefox() driver.get('w

我正在尝试最大化我可以在我的计算机上运行脚本的浏览器数量。当我启动
webdriver
时,如何计算每个Chrome或Firefox进程占用的内存量。例如:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('www.yahoo.com')

# - or - #

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('www.yahoo.com')

实例化
webdriver.Chrome
webdriver.Firefox
至少生成一个 另一个进程,所以要获得总内存消耗的估计值 在启动之前和之后,最容易测量可用的总系统内存 过程。如何找到使用的总内存取决于您的操作系统;支持Linux、Windows、OSX、, FreeBSD和Sun Solaris

import os
import multiprocessing as mp
import contextlib
import time
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as UI
import selenium.webdriver.support.expected_conditions as EC
import psutil

def worker(browsername, args, N):
    start_mem = psutil.virtual_memory()
    Driver = getattr(webdriver, browsername)
    drivers = [Driver(*args) for i in range(N)]
    end_mem = psutil.virtual_memory()
    for driver in drivers:
        driver.quit()
    return end_mem.used - start_mem.used

if __name__ == '__main__':
    N = 10
    pool = mp.Pool(1)

    for driver, args in [('Firefox', ()),
                         ('Chrome', ()), 
                         ('PhantomJS', ('phantomjs',))]:
        used = pool.apply(worker, [driver, args, N])
        print('{:>10}: {}'.format(driver, used))
        time.sleep(5)

    pool.close()
    pool.join()
屈服

   Firefox: 1072779264
    Chrome: 1124683776
 PhantomJS: 102670336
因此,它使用的内存似乎减少了10倍

技术说明:没有可靠的方法强制Python进程将其使用的内存释放回操作系统。因此,我使用多进程在一个单独的进程中生成每个测试,这样当它终止时,所使用的内存就会被释放。
pool.apply()
阻塞,直到
worker
结束