基本配置:阿里云服务器低配,单核2G内存

  首先是看协程的效果:

  

import requests
import lxml.html as HTML
import sys
import time
import gevent
from gevent import monkey
monkey.patch_all() # create url
urls = []
for i in range(int(sys.argv[1]),int(sys.argv[2])):
url = 'http://grri94kmi4.app.tianmaying.com/songs?page='+str(i)
urls.append(url) def get_data(url):
t1 = time.time()
res = requests.get(url)
if res.status_code == 200:
print(url+' : '+'url open success'+' time use: '+ str(time.time()-t1))
html = HTML.fromstring(res.content)
trs = html.xpath('//tbody/tr')
data = []
for tr in trs:
s = {}
s['name'] = tr.xpath('./td/a/text()')[0]
s['url'] = tr.xpath('./td/a/@href')[0]
s['id'] = s['url'][30:]
s['comment'] = tr.xpath('./td[last()]/text()')[0]
data.append(s) if __name__ == '__main__':
total = time.time()
task = []
for url in urls:
task.append(gevent.spawn(get_data,url))
gevent.joinall(task)
print('total time use :', time.time()-total)

  在爬取20个链接的情况下,用时为4s:

  total time use : 4.873192071914673

  线程和进程差不多 ,用时6s左右

  

import requests
import lxml.html as HTML
import sys
import time
from multiprocessing import Pool as ThreadPool
# create url
urls = []
for i in range(int(sys.argv[1]),int(sys.argv[2])):
url = 'http://grri94kmi4.app.tianmaying.com/songs?page='+str(i)
urls.append(url) def get_data(url):
t1 = time.time()
res = requests.get(url)
if res.status_code == 200:
print(url+' : '+'url open success'+' time use: '+ str(time.time()-t1))
html = HTML.fromstring(res.content)
trs = html.xpath('//tbody/tr')
data = []
for tr in trs:
s = {}
s['name'] = tr.xpath('./td/a/text()')[0]
s['url'] = tr.xpath('./td/a/@href')[0]
s['id'] = s['url'][30:]
s['comment'] = tr.xpath('./td[last()]/text()')[0]
data.append(s) if __name__ == '__main__':
total = time.time()
pool = ThreadPool()
results = pool.map(get_data,urls)
pool.close()
pool.join()
print('total time use :', time.time()-total)

  

python 多线程、多进程、协程性能对比(以爬虫为例)的更多相关文章

  1. 多线程 多进程 协程 Queue(爬虫代码)

    快速理解多进程与多线程以及协程的使用场合和特点 首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务.一个CPU,在一个时间切片里只能运 ...

  2. Python自动化 【第十篇】:Python进阶-多进程/协程/事件驱动与Select\Poll\Epoll异步IO

    本节内容: 多进程 协程 事件驱动与Select\Poll\Epoll异步IO   1.  多进程 启动多个进程 进程中启进程 父进程与子进程 进程间通信 不同进程间内存是不共享的,要想实现两个进程间 ...

  3. python中多进程+协程的使用以及为什么要用它

    前面讲了为什么python里推荐用多进程而不是多线程,但是多进程也有其自己的限制:相比线程更加笨重.切换耗时更长,并且在python的多进程下,进程数量不推荐超过CPU核心数(一个进程只有一个GIL, ...

  4. 也说性能测试,顺便说python的多进程+多线程、协程

    最近需要一个web系统进行接口性能测试,这里顺便说一下性能测试的步骤吧,大概如下 一.分析接口频率 根据系统的复杂程度,接口的数量有多有少,应该优先对那些频率高,数据库操作频繁的接口进行性能测试,所以 ...

  5. python 多进程,多线程,协程

    在我们实际编码中,会遇到一些并行的任务,因为单个任务无法最大限度的使用计算机资源.使用并行任务,可以提高代码效率,最大限度的发挥计算机的性能.python实现并行任务可以有多进程,多线程,协程等方式. ...

  6. 深入浅析python中的多进程、多线程、协程

    深入浅析python中的多进程.多线程.协程 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源 ...

  7. Cpython解释器下实现并发编程——多进程、多线程、协程、IO模型

    一.背景知识 进程即正在执行的一个过程.进程是对正在运行的程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都 ...

  8. Python并发编程二(多线程、协程、IO模型)

    1.python并发编程之多线程(理论) 1.1线程概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于 ...

  9. Python进程、线程、协程的对比

    1. 执行过程 每个线程有一个程序运行的入口.顺序执行序列和程序的出口.但是线程不能够独立执行,必须依存在进程中,由进程提供多个线程执行控制.每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该 ...

随机推荐

  1. zoj3765Lights(splay)

    链接 splay的增删改操作. 刚开始对于某段区间首先有了lazy标记时,把其左右孩子给交换了,导致在pushup时又交换了一次而debug了n久. #include <iostream> ...

  2. 安装MySQLdb出现HAVE_WCSCOLL重定义问题的解决方法

    root@wodeyitian MySQL-python-1.2.3]# python setup.py install running install running bdist_egg runni ...

  3. NF!=1

    NF表示列数,不等于1表示列数不为1列

  4. JavaEE汇总

    1.简述Spring. a)      Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,其目的是解决企业应用开发的复杂性,能够使用基本的JavaBean代替EJB,并提供了 ...

  5. codevs 4165 ​高精度求阶乘

    时间限制: 1 s  空间限制: 256000 KB  题目等级 : 白银 Silver 题目描述 Description 用高精度计算出S=n! 其中"!"表示阶乘,例如:5!= ...

  6. 获取显示设备的名称及PNPDeviceID

    实现效果: 知识运用: ManagementObjectSearcher类和ManagementObject类 实现代码: private void button1_Click(object send ...

  7. 6.python

    最早的'密码本' ascii 涵盖了英文字母大小写,特殊字符,数字.01010101ascii 只能表示256种可能,太少,创办了万国码 unicode 16表示一个字符不行,32位表示一个字符. A ...

  8. shell脚本,怎么实现每次新开一个shell都输出一个提示语?

    [root@localhost wyb]# cat test.sh echo -e "\033[32mhello,This is wangyuebo's shell\033[0m" ...

  9. CS193p Lecture 11 - UITableView, iPad

    UITableView 的 dataSource 和 delegate dataSource 是一种协议,由 UITableView 实现,将 Model 的数据给到 UITableView: del ...

  10. css去除链接 input 虚框

    /* css去掉虚框 */ :focus{-webkit-outline-style:none;-moz-outline-style:none;-ms-outline-style:none;-o-ou ...