Python循环放慢

时间:2017-09-16 09:49:12

标签: python loops selenium memory

我有一个python循环,它使用selenium从网站获取一些数据并将其存储在SQL数据库中。开始时每个循环大约需要一秒钟,但经过一段时间它会越来越慢......我认为问题是内存问题,但我不知道如何解决它。 这是我的代码:

count = 0
driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
con = sql.connect(user="user", passwd="passwd", db="db", host="localhost")
cur = con.cursor()


def create():
    if random.random() < 0.5:
        driver.get('http://www.example.com/w')
    else:
        driver.get('http://www.example.com/p')
    name = driver.find_element_by_xpath("//div[@class='address']/h3").text
    name1 = name.split(" ")[0]
    name2 = name.split(" ")[1]
    test = driver.find_element_by_xpath("//div[@class='adr']").text
    test2 = test.replace("\n", " ")
    dd = driver.find_element_by_xpath("(//dl[@class='dl-horizontal')[1]/dd").text
    dd2 = driver.find_element_by_xpath("(//dl[@class='dl-horizontal'])[2]/dd/a").text
    day = driver.find_element_by_xpath("(//dl[@class='dl-horizontal'])[5]/dd").text
    i = "','"
    try:
        values = unidecode("'" + name1 + i + name2 + i + dd + i + dd2 + i + day + i + test2 + "'")
        cur.execute("INSERT INTO accounts (name1,name2,dd,dd2,day,test2) VALUES (" + values + ")")
        con.commit()
        global anzahl
        anzahl += 1
        sys.stdout.write('.')
        sys.stdout.flush()
        gc.collect()

    except sql.Error as e:
        print("Error %d: %s" % (e.args[0], e.args[1]))
        gc.collect()


start = time.time()

for _ in range(200):
    create()

cur.close()
con.close()
end = time.time()

我没有看到任何东西会减慢你的循环速度。我试过gc.collect(),但它没有改变任何东西。 我能做些什么,我的循环在一段时间后不会减速?

1 个答案:

答案 0 :(得分:0)

可能会降低代码速度的因素:

  1. Web服务器,可以减少带宽以防止DoS,
  2. driver对象?
  3. 网络(数据库)可能很慢,
  4. I / O访问(使用sys.stdout.writeprint),具体取决于实际流。它是控制台吗?