协程

协程

一、gevent

pip install gevent

from gevent import monkey
import gevent
import random
import time
# 有耗时操作时需要
monkey.patch_all()  # 将程序中用到的耗时操作的代码,换为gevent中自己实现的模块

def gevent_01(name):
    for i in range(10):
        print(name, i)
        time.sleep(random.random())

if __name__ == '__main__':
    g1 = gevent.spawn(gevent_01, "小明")
    g2 = gevent.spawn(gevent_01, "小友")
    g1.join()
    g2.join()

必须join,因为协程只是依赖在线程上的,当主线程结束,则协程直接结束。

二、全部启动并完成joinall

from gevent import monkey
import gevent
import random
import time
# 有耗时操作时需要
monkey.patch_all()  # 将程序中用到的耗时操作的代码,换为gevent中自己实现的模块

def gevent_01(name):
    for i in range(10):
        print(name, i)
        time.sleep(random.random())

if __name__ == '__main__':
    gevent.joinall(
        [
            gevent.spawn(gevent_01,"小明"),
            gevent.spawn(gevent_01,"小友")

        ]
    )

三、进程、线程、协程

  1. 进程是操作系统资源分配的单位
  2. 线程是CPU调度的单位
  3. 进程切换需要的资源最大,效率很低
  4. 线程切换需要的资源一般,效率一般(当然在不考虑GIL的情况下)
  5. 协程切换任务资源很小,效率高
  6. 多进程、多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中 所以是并发

四、GIL

​ 由于GIL锁的存在,所以当python脚本是I/O密集型时,线程才会有提高执行的效率,CPU密集型有可能会降低效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值