zoukankan      html  css  js  c++  java
  • Python在程序中进行多任务操作-协程

    协程

    协程,又称微线程,纤程。英文名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知识和【免费】工具

    耐得住寂寞,才能登得顶
    Gitee码云:https://gitee.com/lyc96/projects
  • 相关阅读:
    java基础:9.2 接口implements,Comparable,Cloneable接口
    java基础:9.1 抽象类
    java基础:9.4 web爬虫
    java基础:6.0 ArrayList
    java基础:9.3 从web上读取数据
    java基础:12.1 文本I/O(一)
    3.2 FPGA 配置电路/主模式 从模式 JTAG模式
    谷歌浏览器查看HTTP协议
    MIME类型说明
    常见的响应码说明
  • 原文地址:https://www.cnblogs.com/chenlove/p/14038624.html
Copyright © 2011-2022 走看看