58.Python进阶_协程03_gevent

greenlet已经实现了协程,但是还是人工切换,有点麻烦,这节看一下自动切换的模块gevent
原理是当一个greenlet遇到IO(指的是Input,output输入输出,比如网络,文件操作等)操作时,比如访问网络,就自动切换到greenlet,等到IO操作完成,再适当时候切换回来继续执行,由于IO非常耗时,经常让程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行而不是等待IO

安装:

pip3 install gevent

使用方法:

  • g1 = gevent.spawn(work1)
  • gevent.sleep(0.1) # gevent专用耗时操作才会切换使用time.sleep()是无法进行切换的

看一下代码:

import gevent
import time

def work1():
    for i in range(5):
        print('---子协程work1执行----',i)
        #time.sleep(0.2)

        gevent.sleep(0.1)
def work2():
    for i in range(5):
        print('---子协程work1执行----',i)
        #time.sleep(0.2)

        gevent.sleep(0.1)

#创建两个协程

g1 = gevent.spawn(work1)
g2 = gevent.spawn(work2)
g1.join()
g2.join()


gevent.sleep(0.1)

for i in range(5):
    print('---主线程执行----',i)

运行结果:

---子协程work1执行---- 0
---子协程work1执行---- 0
---子协程work1执行---- 1
---子协程work1执行---- 1
---子协程work1执行---- 2
---子协程work1执行---- 2
---子协程work1执行---- 3
---子协程work1执行---- 3
---子协程work1执行---- 4
---子协程work1执行---- 4
---主线程执行---- 0
---主线程执行---- 1
---主线程执行---- 2
---主线程执行---- 3
---主线程执行---- 4

可见上面已经开始切换执行;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值