Gevent 简单体验

Gevent 是一个基于 greenlet 的 Python 的并发框架,以微线程 greenlet 为核心,使用了 epoll 事件监听机制以及诸多其他优化而变得高效

gevent是第三方库,通过greenlet实现协程,其基本思想是:

当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO

import gevent
from gevent import monkey
monkey.patch_all()

需要先声明


 

import gevent
from gevent import monkey
monkey.patch_all()
import time


import requests

def get_site():
    # 访问一次链接
    requests.get("http://www.baidu.com/").content.decode()
    return 'ok'

def no_gevent():
    # 没有gevent 访问20次
    start = time.time()
    for i in range(20):
        get_site()
    end = time.time()
    print((end - start))

def yes_gevent():
    # 有gevent 访问20次
    start = time.time()
    task = []
    for i in range(20):
        task.append(gevent.spawn(get_site))
    # 阻塞主线程,直到所有协程运行完成
    gevent.joinall(task)
    end = time.time()
    print((end - start))
    for i in task:
        print(i.get())


if __name__ == '__main__':
    no_gevent()
    yes_gevent()

测试流程:使用和不使用gevent 访问20次百度和耗时时间

测试结果:使用gevent 》耗时0.12秒

                  不使用gevent 》耗时2秒

备注: 也可以通过gevent池控制并发数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值