zoukankan      html  css  js  c++  java
  • 协程

    # 概述
    # Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。
    #
    # gevent是第三方库,通过greenlet实现协程,其基本思想是:
    #
    # 当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。
    #
    # 由于切换是在IO操作时自动完成,所以gevent需要修改Python自带的一些标准库,这一过程在启动时通过monkey patch完成
    import gevent, time
    
    
    def A():
        print("A run...")
        gevent.sleep(0)  # 上下文切换
        print("A run again....")
    
    
    def B():
        print("B run...")
        gevent.sleep(1)
        print("B run again....")
    
    
    def C():
        print("C run...")
        gevent.sleep(0)
        print("C run again....")
    
    
    start = time.time()
    gevent.joinall([
        gevent.spawn(A),
        gevent.spawn(B),
        gevent.spawn(C),
    ])
    print(time.time() - start)  # 总运行时间等于最长那个
  • 相关阅读:
    PAT 1017 Queueing at Bank
    一句有意思的代码
    PAT 1031 Hello World for U
    PAT 1024 Palindromic Number
    PAT 1032 Sharing
    各显神通
    ZJU PAT 1023
    静夜,乱思
    PAT 1024 Palindromic Number
    虚函数表
  • 原文地址:https://www.cnblogs.com/jum-bolg/p/10926454.html
Copyright © 2011-2022 走看看