Python并发任务之协程

多线程会消耗系统资源,多进程则有GIL限制和影响,Python中还有一种高效地执行并发任务的方式,那就是协程了。

协程也成为微线程,比线程更轻量级。协程通过在单线程内进行函数执行切换来进行并发。也就是说,协程是单线程执行,并且在线程内函数之间的执行也是可以切换的。

如果说多进程、多线程是抢占式的任务处理方式,那么协程就是协作式的任务处理方式。协程虽然是单线程,但是通过协作切换来充分利用CPU,所以也可以实现高并发的场景。多进程时程序启动多个和自己一样的子进程,每个进程都有自己的GIL,所以多进程在多核CPU上不会受GIL的影响。多线程时程序会通过进程内的主线程来启动子进程。因为在同一个进程内,所有的线程都共同一个GIL,所以多线程在多核CPU上变为串行执行。协程是通过分割主进程的计算方法来实现的,在单线程的情况下,协程始终都能获得GIL,所以不会受GIL的影响。如果希望协程利用多核CPU的计算能力,那么只能通过多进程和协程配合的模式。

协程利用Python的实现,使用关键字yield来保持函数现场的能力,并在下次调用时再恢复函数的现场。即给yield添加接收信息的能力,那么就可以实现协程了:

伪代码如下:

def consumer():
    r = ''
    while True:
        n = yield r
        if not n:
            return 
        print("Consumer %s ..." % n)
        r = '200 OK'

def produce(c):
    c.next()
    n = 0
    while
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值