Python多线程与多进程浅析之三

基于 I/O 的多线程

多线程的例子中比较多的就是抓取网页,因为抓取网页是典型的 I/O 开销,因此 Python 的多线程终于不显得那么鸡肋了。

我们把上面例子中的计算函数修改为抓取网站的大小。先用最标准的方式,不用线程。

# 标准方式抓取

>>> from time import time

>>> import requests

>>> list_url = ['http://www.qq.com', 'http://chuangyiji.com',

...  'http://taobao.com', 'http://mingrihui.com']

>>> def get_url_size(url):

...    rq = requests.get(url)

...    length = len(rq.content)

...    print(url, length)

...    return length

>>> start = time()

>>> for url in list_url:

...    get_url_size(url)


>>> end = time()

>>> print('\ncost time {:f} s'.format(end - start))

http://www.qq.com 246846

http://chuangyiji.com 84537

http://taobao.com 123926

http://mingrihui.com 43480

cost time 11.283091 s

我在里面故意放了两个自己的网站(你没见过的那两个域名就是),一个网站是在国外,一个网站在国内的云主机上,相对访问速度比较慢,因此在执行程序的时候有时候会有明显的等待。对四个网站处理完,差不多要20秒左右或者更多。大家可以看到结果呈现的顺序是和列表中一样的。这是一个单线程的例子。


>>>阅读全文

你可能感兴趣的:(Python多线程与多进程浅析之三)