我有一个我在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使用了这个库,它最终大大减慢了程序的速度,卸载了它,一切运行顺利。