目标:
    1:知道什么是gevent
    2:掌握gevent 怎么使用及实现协程多任务
    3:掌握如何给一个 gevent 不能识别为耗时操作的代码,转变成可以识别为耗时代码操作(打补丁)

    一:什么是 gevent

    答:上一集我们用 greenlet 实现了协程多任务,但是多任务却要我们手动切换任务函数,不要捉急 python 有一个更为强大的第三方库gevent 它可以实现自动切换任务函数

    gevent 第三方库可以自动检测代码中哪些是耗时操作,遇到耗时较长的代码就会立刻切换到另一个任务去执行,然后在一个合适的时间返回执行刚开始的函数

    二:gevent 怎么使用及实现协程多任务

    gevent实现多任务步骤:

    1:导入模块import gevent

    2:创建任务函数,任务函数内含耗时操作(gevent.sleep(0.5))

    3:为gevent 指派任务 并且返回一个 gevent 对象 即 对象 = gvenv.spawn(任务函数,参数1,参数2,…….),注意有几个任务就指派几次任务返回几个对象,先指派的哪个任务就先执行哪个任务函数

    4:让主线程等待协程执行结束后在结束,即 gevent对象.join()

    注意事项:
    1:在任务函数中耗时操作为什么不能使用 time.sleep(0.5)只能使用 gevent.sleep(0.5),因为gevent只能识别自己的gevent.sleep(0.5)是耗时操作,不能识别time.sleep(0.5)是耗时操作,但是它们两个的效果是一样的

    2:第四步的join()必须书写,否则在协程没有执行结束,主线程就结束了并且释放数据和内存,不能输出任何数据

    3:耗时操作包括 I/O操作,比如文件的读取写入

    快速代码体验:

    image.png

    三:给一个 gevent 不能识别为耗时操作的代码(time.sleep(0.5)),转变成可以识别为耗时代码操作(打补丁)

    什么是打补丁:打补丁就是在不修改程序源代码的情况下为程序增加新的功能
    给 gevent 打补丁:在不改变 gevent 原始代码的情况下,为 gevent 增加新的功能

    利用打补丁操作将 gevent 不能识别为耗时操作的代码(time.sleep(0.5))识别为耗时操作步骤:

    第一步:导入模块 from gevent import monkey

    第二步:破解所有即可 monkey.patch_all( ) 这样就可以识别 time.sleep(0.5)代码为耗时操作了

    注意事项:上面的这两行代码一般都写在一个程序的最上方!

    快速代码体验:

    image.png

    猴子补丁功能:
    1:在不修改第三方源代码的情况下增加原来不支持的功能
    2:在运行时为内存中的对象增加补丁,而不是在磁盘的源代码中增加补丁