python BeautifulSoup / threading在xubuntu上很慢,不知道为什么

时间:2015-06-09 21:46:54

标签: python linux windows multithreading beautifulsoup

我有一个我在Windows上编写的程序运行得非常好,但是当它在Xubuntu中运行时,它非常缓慢且我不确定为什么,我已经将问题与美丽的汤或线程所以我制作了一个测试程序并在Windows和Xubuntu上运行它。

from testThread import myThread
thread1 = myThread("thread1","http://www.youtube.com")
thread2 = myThread("thread2","http://www.youtube.com")
thread1.start()
thread2.start()
thread1.join()
thread2.join()
from threading import Thread
import time
from bs4 import BeautifulSoup
import requests
class myThread(Thread):
    def __init__(self, name, url):
        Thread.__init__(self)
        self.t0 = time.time()
        self.name = name
        self.url = url
        self.r = requests.get(url)
    def run(self):
        start_time =  time.time() - self.t0
        soup = BeautifulSoup(self.r._content)
        end_time = time.time() - self.t0
        print self.name, "Time: %s" % str(end_time - start_time)

程序的基本功能是创建2个线程,打印出使用BeautifulSoup获取URL内容所需的时间。

Xubuntu输出:

thread1 Time: 6.88162994385
thread2 Time: 6.92221403122

Windows输出:

thread1 Time: 0.524999856949
thread2 Time: 0.542999982834

正如你所看到的,窗户在很长一段时间内都更快,我完全不知道为什么。

Xubuntu规格:Intel(R)Core(TM)i7,2.6Ghz,16Gb内存,Ubuntu 15.04

Windows规格:英特尔(R)酷睿(TM)Duo CPU 2.2Ghz,2Gb内存,Windows 7

那么在执行此任务时,Xubuntu与Windows相比如何变得如此之慢?我一直在寻找解决这个问题的方法,但没有运气。非常感谢任何帮助,谢谢。

编辑:我应该注意,我已经尝试明确说明要使用的BeautifulSoup解析器。我试过了

soup = BeautifulSoup(self.r._content,"lxml")

使用lxml作为解析器时,对输出没有影响

编辑:我已经进一步隔离了问题,并确定问题发生在美丽的汤Dammit.py类中。

BeautifulSoup.dammit中的代码

import codecs
from htmlentitydefs import codepoint2name
import re
import logging
import string

# Import a library to autodetect character encodings.
chardet_type = None
try:
    # First try the fast C implementation.
    #  PyPI package: cchardet
    import cchardet
    def chardet_dammit(s):
        return cchardet.detect(s)['encoding']
except ImportError:
    try:
        # Fall back to the pure Python implementation
        #  Debian package: python-chardet
        #  PyPI package: chardet
        import chardet
        def chardet_dammit(s):
            return chardet.detect(s)['encoding']
        #import chardet.constants
        #chardet.constants._debug = 1
    except ImportError:
        # No chardet available.
        def chardet_dammit(s):
            return None

在Windows上,它执行"返回None"在

except ImportError:
    # No chardet available.
    def chardet_dammit(s):
        return None

在Xubuntu上然而它执行"返回chardet.detect(s)['编码']

try:
    # Fall back to the pure Python implementation
    #  Debian package: python-chardet
    #  PyPI package: chardet
    import chardet
    def chardet_dammit(s):
        return chardet.detect(s)['encoding']
    #import chardet.constants
    #chardet.constants._debug = 1

Xubuntu执行的代码需要更长的时间。似乎这个问题与Beautiful soup导入的库有关。我不确定为什么Windows会获得嵌套导入错误异常而Xubuntu不是,但似乎当beautifulsoup成功导入库时,它会大大减慢它,这看起来很奇怪。如果有人能够更好地理解这里发生的事情可以解释一下,我将不胜感激,谢谢。也不确定这是否有任何影响,但我在Xubuntu和Windows上使用pycharm。

编辑:发现问题。在Xubuntu上我安装了chardet库,而在Windows上我没有安装。 BeautifulSoup使用了这个库,它最终大大减慢了程序的速度,卸载了它,一切运行顺利。

0 个答案:

没有答案