Python3进阶-协程

协程简介

又称为微进程,纤程。非抢占式使用资源。

优点

优点1:

协程极高的执行效率。因为子程序切换不是纤程切换,而是由程序自身控制,因此,没有纤程切换的开销,和多线程对比,纤程数量越多,协程的性能优势就越明显。

优点2:

不需要多线程的锁机制,因为只有一个线程,也不存在同事写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

用途

多线程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的新能

协程切换

#-*- coding:utf-8 -*-
from greenlet import greenlet

def test1():
    print(12)
    gr2.switch()                        #切换对象切换到 [gr2] 对象
    print(34)
    gr2.switch()
def test2():
    print(56)
    gr1.switch()                        #切换对象切换到 [gr1] 对象
    print(78)
gr1 = greenlet(test1)                   # test1 函数的协程对象 gr1
gr2 = greenlet(test2)                   # test2 函数的协程对象 gr2
gr2.switch()
56
12
78

gevent模块协程测试

单线程执行爬虫测试

#-*- coding:utf-8 -*-
import requests,gevent,time
start = time.time()

def f(url):
    print("GET:%s" % url)
    resp = requests.get(url)                            #获取URL
    data = resp.text                                    #URL中的数据
    print("%s 的文件大小为%s"%(url,len(data)))          #计算大小
f('http://www.python.org')
f('https://www.centos.org//')
f('http://zhaojunhui.cn/')
f('http://www.taobao.com/')
f('http://www.jd.com/')
f('http://www.sdo.com/')
print("运行时间",time.time() - start)
GET:http://www.python.org
http://www.python.org 的文件大小为48758
GET:https://www.centos.org//
https://www.centos.org// 的文件大小为20842
GET:http://zhaojunhui.cn/
http://zhaojunhui.cn/ 的文件大小为714
GET:http://www.taobao.com/
http://www.taobao.com/ 的文件大小为132353
GET:http://www.jd.com/
http://www.jd.com/ 的文件大小为122571
GET:http://www.sdo.com/
http://www.sdo.com/ 的文件大小为12383
运行时间 3.820824384689331

gevent模块多线程协程测试[内容越多效果越明显]

#-*- coding:utf-8 -*-
import requests,gevent,time
start = time.time()

def f(url):
    print("GET:%s" % url)
    resp = requests.get(url)                            #获取URL
    data = resp.text                                    #URL中的数据
    print("%s 的文件大小为%s"%(url,len(data)))          #计算大小
gevent.joinall([
    gevent.spawn(f,"http://www.python.org"),
    gevent.spawn(f,"https://www.centos.org/"),
    gevent.spawn(f,"http://www.zhaojunhui.cn"),
    gevent.spawn(f,"http://www.taobao.com"),
    gevent.spawn(f,"http://www.jd.com"),
    gevent.spawn(f,'http://www.sdo.com/')
])
print("运行时间",time.time() - start)
GET:http://www.python.org
http://www.python.org 的文件大小为48758
GET:https://www.centos.org/
https://www.centos.org/ 的文件大小为20842
GET:http://www.zhaojunhui.cn
http://www.zhaojunhui.cn 的文件大小为714
GET:http://www.taobao.com
http://www.taobao.com 的文件大小为132353
GET:http://www.jd.com
http://www.jd.com 的文件大小为122571
GET:http://www.sdo.com/
http://www.sdo.com/ 的文件大小为12383
运行时间 3.0470935821533203

转载于:https://my.oschina.net/zhaojunhui/blog/1829585

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值