2014-11-03 60 views
2

我正在嘗試將我的計算機上運行腳本的瀏覽器數量最大化。當我啓動webdriver時,如何計算出每個Chrome或Firefox進程所消耗的內存量。例如:在webdriver上對Firefox和Chrome的內存消耗進行基準測試

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') 

回答

4

實例化webdriver.Chromewebdriver.Firefox產卵至少一個 等過程,因此要獲得總內存消耗估計它可能是 最簡單的衡量之前和啓動 處理後可用系統內存。如何查找使用的總內存取決於您的操作系統; psutils module支持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 

所以它出現PhantomJS使用大約10倍的內存更少。

技術說明:沒有可靠的方法來迫使Python進程放棄它已經使用的內存回到操作系統short of terminating the process。所以我使用多處理技術在一個單獨的進程中產生每個測試,因此當它終止時使用的內存被釋放。 pool.apply()阻止,直到worker結束。