基本配置:阿里云服务器低配,单核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. BundleConfig包含js,css失败

    今天在做mvc项目的时候,引入了bootstrap样式.但是包含css和js的时候出错了 于是我查阅资料,好多人都说后缀名前面不能包含".",于是我把min前面的".&q ...

  2. I/O————数据流

    如何将一个long类型的数据写入文件中? 转字符串 → 通过 getbytes() 写进去,费劲,而且在此过程中 long 类型的数需要不断地转换. 现在,Java 中的数据流能够很好的解决这个问题( ...

  3. java maven cxf笔记

    IDE: 一:新建Maven项目 1.File->New->Project.. 2. 3. 4.   二:添加cxf和jetty依赖 <dependencies> <!- ...

  4. Java 堆内存和栈内存

    看了一些别人总结的博客,感觉对堆内存和栈内存有了一个初步的认识.所以来写写自己对堆内存和栈内存的理解. Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 在函数中定义的一些基本类型的变量和对象 ...

  5. Android中的Selector的使用总结

    Android中的Selector主要是用来改变ListView和Button控件等其他空的默认背景,其使用方法可以如下所示: 1.首先在res目录下drawable文件夹,新建一个comm_butt ...

  6. 浅析linux下软件的安装

    Linux环境: CentOs 6.0 知识点介绍: 一.tarball安装 安装步骤: 将tarball文件在/usr/local/src目录解压缩 ./configure:这个步骤是建立makef ...

  7. COGS 1786. 韩信点兵

    ★★★   输入文件:HanXin.in   输出文件:HanXin.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 韩信是中国军事思想“谋战”派代表人物,被后人奉为“ ...

  8. UVALive 3211 Now or Later (2-SAT)

    题目的要求一个最小值最大,二分即可,但是怎么判断呢? 飞机早或者晚两种状态,可以用一个布尔变量表示,假设当前猜测为m,那么根据题意, 如果x和y所对应的时间冲突那么就是¬(xΛy)化成或的形式(¬x) ...

  9. 贴一发STL源码

    int my_lower_bound(int size, long long key){    int first = 0, middle;    int half, len;    len = si ...

  10. python_111_动态导入模块

    lib下aa.py文件内容: class C: def __init__(self): self.name='alex' from lib import aa#正常导入 print(aa.C) 动态导 ...