协程

协程,又称微线程,纤程。英文名Coroutine。

协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。

通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定

协程和线程差异

在实现多任务时, 线程切换从系统层面远不止保存和恢复 CPU上下文这么简单。操作系统为了程序运行的高效性每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作。所以线程的切换非常耗性能。但是协程的切换只是单纯的操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住。

简单实现协程

import timedef task1():    while True:        print("--1--")        time.sleep(0.1)        yielddef task2():    while True:        print("--2--")        time.sleep(0.1)        yielddef main():    t1 = task1()    t2 = task2()    while True:        next(t1)        next(t2)if __name__ == '__main__':    main()"""--1----2----1----2----1----2----1----2----1----2----1----2----1----2----1----2----1----2----1----2----1--省略...."""

欢迎关注公众号:Python爬虫数据分析挖掘,回复【开源源码】免费获取更多开源项目源码

公众号每日更新python知识和【免费】工具

python 协程_Python多任务协程相关推荐

  1. python gevent服务器_python gevent 协程

    简介 没有切换开销.因为子程序切换不是线程切换,而是由程序自身控制,没有线程切换的开销,因此执行效率高, 不需要锁机制.因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断 ...

  2. python异步封装_python中用协程(异步)实现map函数,爬虫也可以封装进去,

    1.python中得函数map(),通过加延时发现,是单线程执行,有阻塞,实现如下: import time def A(a): time.sleep(0.5) c = a + 11 return c ...

  3. python爬携程_python爬虫-携程-eleven参数

    携程-eleven分析 一.eleven的位置 通过对旁边栈的分析,它是在另一个js文件中调用的.那个js文件是一个自调用的函数,所以我们可以直接copy下来,用浏览器执行看看 执行运行是会报错的,u ...

  4. python 进程池_Python实践17-进程池

    多进程的优势尽管Python中的线程是OS原生的(它们不是被模拟出来的,它们是真实的操作系统线程),它们被全局解释器锁(GIL)所束缚,所以同一时刻只有一个线程可以和Python对象交互. 通过使用多 ...

  5. python从网址爬图片协程_Python爬虫多任务协程爬取虎牙MM图片

    查看: 4420|回复: 241 [作品展示] Python爬虫多任务协程爬取虎牙MM图片 电梯直达 发表于 2019-4-17 21:35:47 | 只看该作者 |倒序浏览 |阅读模式 马上注册,结 ...

  6. python 协程_Python 协程与 Go 协程的区别(一)

    ? "Python猫" ,一个值得加星标的公众号 花下猫语:年关将近,不知各位过得怎样?我最近有些忙,收获也挺多,以后有机会分享下.吃饭时间,追了两部剧<了不起的麦瑟尔夫人& ...

  7. python 实现多任务协程下载斗鱼平台图片

    python 实现多任务协程下载斗鱼平台图片 import re import gevent from gevent import monkey, pool import time, random i ...

  8. Python初级爬虫(利用多任务协程爬取虎牙MM图片)

    Python多任务协程下载虎牙直播MM图片 # coding = utf-8 import re import gevent from gevent import monkey, pool impor ...

  9. python协程实现多任务

    目录 一.协程 二.协程和线程.进程的差异 三.使用yield实现协程 四.使用greenlet来实现协程 五.gevent来实现协程 一.协程 协程:又称微线程,纤程.是python中另外一种实现多 ...

最新文章

  1. 填个小坑,Vue不支持IE8及以下,跨域ajax不支持IE9
  2. 牛客java面试题总结版(三)
  3. c语言怎么判定结构体有无数据,C语言中什么是结构体,怎么定义结构体。
  4. python解密_python在加密解密中的例子(尽可能去深挖)
  5. python画正方形内切圆_python画出三角形外接圆和内切圆的方法
  6. java NIO网络编程之SelectionKey
  7. 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)...
  8. js 省市下拉列表联动
  9. Codeforces 837D 动态规划
  10. python作函数图像_如何使用python的matplotlib模块画余切函数图像
  11. 基于C++实现的一种通用Base编解码器(Hex(Base16)/Base32/Base64)
  12. AcWing:176. 装满的油箱(bfs + dijiskla思想)
  13. 我们为什么要推广经方?
  14. Python-10.1-面向对象
  15. rhel配置DNS分析+实验
  16. Jupyter notebook如何更换主题、更改字体大小?
  17. 人到底是为了什么活着?
  18. 函数的极限与连续性的关系
  19. 支付宝报错: invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为:xxx
  20. RRT(Rapidly-Exploring Random Trees)算法详解及python实现

热门文章

  1. java上传rar文件_java实现上传zip/rar压缩文件,自动解压
  2. 阿里巴巴中文站架构设计实践(何崚)图书
  3. 51单片机50个实例代码_【附代码】51单片机电子密码锁教程
  4. C++ virtual 析构函数
  5. C# 线程池ThreadPool
  6. cm0中断优先级_转:第13章 FreeRTOS任务优先级修改及其分配方案
  7. 数据链路层:ARP协议详解(绝对经典)
  8. 不属于python数据类型的是_Python不支持的数据类型有( )。
  9. c++远征之多态篇——虚函数及其实现原理
  10. VS 使用 :新建项目