正如标题所示,我正在开发一个用 python 编写的网站,它多次调用 urllib2 模块来读取网站。然后我用 BeautifulSoup 解析它们。
由于我必须阅读 5-10 个网站,因此页面需要一段时间才能加载。
我只是想知道是否有办法一次阅读所有网站?或者有什么技巧可以让它更快,比如我应该在每次读取后关闭 urllib2.urlopen ,还是保持打开状态?
Added:另外,如果我只是切换到 php,从其他站点获取和解析 HTML 和 XML 文件会更快吗?我只是希望加载速度更快,而不是目前需要大约 20 秒
我正在使用现代 Python 模块重写下面 Dumb Guy 的代码,例如threading
and Queue
.
import threading, urllib2
import Queue
urls_to_load = [
'http://stackoverflow.com/',
'http://slashdot.org/',
'http://www.archive.org/',
'http://www.yahoo.co.jp/',
]
def read_url(url, queue):
data = urllib2.urlopen(url).read()
print('Fetched %s from %s' % (len(data), url))
queue.put(data)
def fetch_parallel():
result = Queue.Queue()
threads = [threading.Thread(target=read_url, args = (url,result)) for url in urls_to_load]
for t in threads:
t.start()
for t in threads:
t.join()
return result
def fetch_sequencial():
result = Queue.Queue()
for url in urls_to_load:
read_url(url,result)
return result
最佳时间find_sequencial()
是2秒。最佳时间fetch_parallel()
是0.9秒。
这也是不正确的说法thread
由于 GIL,它在 Python 中毫无用处。这是线程在 Python 中有用的情况之一,因为线程在 I/O 上被阻塞。正如你在我的结果中看到的,并行情况快了 2 倍。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)