美文网首页
Python——协程操作

Python——协程操作

作者: 阿猫阿狗py | 来源:发表于2018-08-23 19:48 被阅读17次
1. 协程,常被称为微线程,是一种多任务并发的操作方式

Python中的多任务处理,根据资源消耗情况可以选择多进程并发同时也可以在节省系统资源的情况下选择协程并发,协程由于是工作在一个线程中的执行单元,所以系统资源消耗是最少的

定义:协程是运行在单线程中的并发程序

多任务并发

安装gevent模块 #该模块提供了基于事件的单线程多任务事件管理机制
pip install gevent

from greenlet import greenlet
def sing():
    while 1:
        print("sing...")
        g2.switch()
def dance():
    while 1:
        print("dance…")
        g1.switch()
if __name__ == "__main__":
    # 单线程多任务操作
    # 创建两个协程序
    g1 = greenlet(sing)
    g2 = greenlet(dance)
# 首选切换让g1执行
    g1.switch()
基于事件的协程让步执行
import gevent
def sing():
    while 1:
        print("sing...")
        # 切换标志:让步:可以执行一个异步任务
        gevent.sleep(1)

def dance():
    while 1:
        print("dance…")
        # 切换标志:让步
        gevent.sleep(1)
if __name__ == "__main__":
    # 创建协程序
    g1 = gevent.spawn(sing)
    g2 = gevent.spawn(dance)
    g1.join()
    g2.join()

基于python生成器对象的多任务

Python中为了有效地利用内存进行程序的运算操作,提供了一个生成器对象yield,所谓生成器,就是在程序执行到该代码时才参与运算得到结果,经常被用作协程操作和组合数据类型的推倒生成。

通过生成器操作完成协程的处理
    生成器:当代码执行到这一行时,预加载准备但是不会直接执行,当该预加载代码需要运算时才会主动执行
    生成器对象主要的核心函数就是next(),通过next()方法才能执行运算得到运算的下一个结果值。
def sing():
    while 1:
        print("唱歌>>>>>>>>>>>>>>>>>>>>>>>>>>")
        yield()# 协程让步->让同一个线程中的其他协程可以执行。
def dance():
    while 1:
        print("跳舞<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<")
        next(s)# 主动调用->通过next()函数,直接调用sing()协程开始运行

if __name__ == "__main__":
    s = sing()
    d = dance()
协程:python3.4版本

Python版本中添加了异步io操作模块asyncio,对于协程的操作支持就变得比较友好,通过异步io操作,可以将多路io程序通过协程的方式提升操作效率

import asyncio
# 协程:coroutine
# 声明一个协程函数
@asyncio.coroutine
def sing():
    while 1:
        print("唱吧唱吧.......")
        # 协程让步:执行异步操作,让另一个函数也同时执行
        yield from asyncio.sleep(2)

@asyncio.coroutine
def dance():
    while 1:
        print("跳舞跳舞.......")
        yield from asyncio.sleep(1)
if __name__ == "__main__":
    # 创建一个事件轮询对象
    loop = asyncio.get_event_loop()

    # 编译多个函数[事件]到轮询对象中
    loop.run_until_complete(asyncio.gather(sing(), dance()))

    # 关闭事件轮询对象
    loop.close()
协程:python3.5版本

Python3.5中新增了新的操作机制以提高对协程的支持

新增async代替了原来的@asyncio.corotine,新增await替代了原有的yield from步骤,简化和优化了原有协程处理流程。

import asyncio
async def sing():
    # 声明异步函数
    while 1:
        print("sing.........")
        await asyncio.sleep(1)  # 模拟这里产生了一个异步操作[异步IO]
async def dance():
    # 声明异步函数
    while 1:
        print("dance.........")
        await asyncio.sleep(2)
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.gather(sing(), dance()))
    loop.close()

相关文章

  • 36.Python并发编程之协程

    Python并发编程之协程 协程协程是程序级别的概念,操作系统根本就没有协程的概念!!!协程的本质就是一条线程,可...

  • python异步协程(aiohttp,asyncio)

    python异步协程 环境:python3.7.0 协程 协程,英文叫做 Coroutine,又称微线程,纤程,协...

  • Python——协程操作

    1. 协程,常被称为微线程,是一种多任务并发的操作方式 Python中的多任务处理,根据资源消耗情况可以选择...

  • Python协程

    这几天看了看操作系统,顺便研究了一下Python的协程,下面就是做的一点笔记 协程是什么? 协程,英文Corout...

  • aioredis的使用

    最近找了python协程的道,关于网络IO的操作都想找协程的方式来做,下面是使用aioredis建立连接并获取数据...

  • 索引 - Python

    文集主页 Python 解释器和三种栈多进程、多线程、协程、并发并行Python I/O 操作(一)Python ...

  • asyncio + asyncio 异步编程实例

    协程用法 接下来,我们来了解下协程的实现,从 Python 3.4 开始,Python 中加入了协程的概念,但这个...

  • Python 协程

    仅供学习,转载请注明出处 协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个...

  • 协程

    1.协程 协程,又称微线程,纤程。英文名Coroutine。 1.1 协程是什么 协程是python个中另外一种实...

  • Python并发编程——协程

    摘要:Python,协程,gevent 协程基本概念 协程,又称微线程,纤程。英文名Coroutine,是Pyth...

网友评论

      本文标题:Python——协程操作

      本文链接:https://www.haomeiwen.com/subject/fcnmiftx.html