博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
协程 - 单线程并发--day36
阅读量:4932 次
发布时间:2019-06-11

本文共 1333 字,大约阅读时间需要 4 分钟。

"""     ----协程----     可以这么理解是协助线程更高效的工作     本质就是单线程实现并发     也称之为微线程(它比线程更轻量级  单线程下任务的切换 比操作系统切换线程要简单的多)     为什么有 是因为 在CPython中 无法并行执行任务导致效率低 所以我们就需要一种方案 能够将单线程的效率最大化 就是协程     Python中 使用Gevent模块来 实现协程  其能在多个任务间进行切换 而且能够自己检测IO """
from gevent import monkey# 必须打补丁才能检测IO是否堵塞monkey.patch_all()import gevent,timedef task1():    print("task1 run")    time.sleep(3)    print("task1 over")def task2():    print("task2 run")    print("task2 over")# 先提交线程g1 = gevent.spawn(task1)g2 = gevent.spawn(task2)# 将任务全部执行gevent.joinall([g1, g2]
"""     ----单线程并发----     通过生成器就能完成并发执行     生成器的特点 只要函数中出现了yield该函数就变成了生成器     在执行时与普通函数有什么区别??     单线程并发 是为了提高效率     对于计算密集型任务 单线程并发 反而降低效率     对于IO密集型  如果可以在执行IO操作的时候 切换到其他计算任务 就能提高CPU占用率 从而提高效率  """
# 实现单线程并发的原理import timedef task1():    a = 1    while True:        print("task1 run")        a += 1        print(a)        yielddef task2():    g = task1()    while True:        print("task2 run")        time.sleep(2)        next(g)task2()
"""     ----单线程并发greenlet模块----     greenlet 主要封装了生成器 是的我们在使用生成器实现并发时 简化了代码 """
import greenletimport timedef task1():    print("task1 run")    time.sleep(2)    g2.switch()    print("task1 run")def task2():    print("task2 run")    g1.switch()g1 = greenlet.greenlet(task1)g2 = greenlet.greenlet(task2)g1.switch()

 

转载于:https://www.cnblogs.com/wenchen/p/10221237.html

你可能感兴趣的文章
第一次作业
查看>>
SQL中的escape的用法
查看>>
C#之结束指定进程!...
查看>>
CV特征提取:
查看>>
虚拟机极简配置manjaro gnome
查看>>
Linux配置成网关
查看>>
【Yii】数据库读写方法:AR模型和DAO方法
查看>>
具有普遍性的一些关系
查看>>
理解和使用SQL Server中的并行
查看>>
第二冲刺阶段计划
查看>>
Redis 安装与配置
查看>>
spark[源码]-TaskSchedulerlmpl类源码
查看>>
crm
查看>>
一道面试题
查看>>
C语言第三次作业
查看>>
从零开始学算法:高精度计算
查看>>
golang实现udp接入服务器
查看>>
iphone AES加密
查看>>
三星S4 i9508 4.4.2 root 教程
查看>>
二进制运算
查看>>