协程

  • 协程多用在函数间切换,轻量级使用资源,生成器是实现协程的基本方式,这里首先看一下专门用作协程的模块greenlet。

    import greenlet
    
    def func1():
        print("eat starting")
        g2.switch()
        print("eat end")
        g2.switch()
    
    
    def func2():
        print("play starting")
        # g1.switch()
        print("play end")
    
    
    g1 = greenlet.greenlet(func1)
    g2 = greenlet.greenlet(func2)
    func1()
    
  • 这样调用switch方法,可以在函数中切换到另外一个函数中执行。

Gevent

  • 通常在开启协程时,使用gevent模块:
import gevent
import time

def func1():
    print("eat starting")
    gevent.sleep(1) # 使用gevent.sleep()可以感知到这个耗时动作
    print("eat end")


def func2():
    print("play starting")
    gevent.sleep(1)
    print("play end")


g1 = gevent.spawn(func1)
g2 = gevent.spawn(func2)
g1.join()
g2.join()
  • 在协程导入前加入from gevent import monkey;monkey.patch_all(),可以感知下面所有包的耗时操作,这样就可以自动开启协程了
from gevent import monkey;monkey.patch_all()
import gevent
import time

def func1():
    print("eat starting")
    time.sleep(1)  # 这里使用time操作就可以了
    print("eat end")


def func2():
    print("play starting")
    time.sleep(1)
    print("play end")


g1 = gevent.spawn(func1)
g2 = gevent.spawn(func2)
g1.join()
g2.join()
  • 进程和线程的任务切换由操作系统完成
  • 协程任务之间的切换由程序完成,只有遇到协程模块能识别的IO操作的时候,程序才会进行任务切换,实现并发的效果。
  • gevent.joinall() 可以开启一个可迭代对象中的所有协程。
from gevent import monkey;monkey.patch_all()
import gevent
import time

def func1():
    print("eat starting")
    time.sleep(1)  # 这里使用time操作就可以了
    print("eat end")
g_list = []
for i in range(10):
    g = gevent.spawn(func1)
    g_list.append(g)

gevent.joinall(g_list)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 协程 阅读目录 一 引子 二 协程介绍 三 Greenlet模块 四 Gevent模块 引子 之前我们学习了线程、...
    go以恒阅读 807评论 0 1
  • 一、总体内容 1.1、协程的介绍 1.2、迭代器以及迭代器的应用 1.3、生成器(生成器与迭代器保存的都是生成数据...
    IIronMan阅读 910评论 0 1
  • 一、python协程概念的引入 之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是...
    SlashBoyMr_wang阅读 406评论 0 3
  • #在不开辟线程的基础上,执行多任务(多个任务交替执行的),又称为微线程 # 一般来说,协程有三种方式,待我一一道来...
    米兰的小铁匠阅读 592评论 0 0
  • 收到要涨房租的短信时,我正在外地旅游。那一刻,我委屈的想哭。微薄的薪水,又因为与日俱增的房价刚刚与自己想买的房子失...
    家有果宝阅读 327评论 0 0

友情链接更多精彩内容