美文网首页
python协程

python协程

作者: 洛克黄瓜 | 来源:发表于2018-12-10 11:15 被阅读0次

正在看《流畅的python》这本书,看到协程这个章节,先记录个很好的例子,后续详细补充读书笔记

  • 定义一个计算移动平均值的协程
def gen_average():
    total = 0.0
    count = 0
    average = None
    while True:
        item = yield average
        total += item 
        count += 1
        average = total / count

gen_average_obj = gen_average() 
next(gen_average_obj)     # 使用next函数预激协程,也可以使用gen_average_obj.send(None)来预激
gen_average_obj.send(2) # 2.0
gen_average_obj.send(4) # 3.0

  • 预激协程的装饰器
    预激是要让程序走到yield那一步,所以调用.send(x)之前一定记得要执行next(my_coro)
from functools import wraps

def coroutine(func):
    @wraps(func)
    def primer(*args, **kwargs):
        gen = func(*args, **kwargs)
        next(gen)
        return gen
    return primer

@coroutine
def gen_average():
    total = 0.0
    count = 0
    average = None
    while True:
        item = yield average
        total += item 
        count += 1
        average = total / count

coro_avg = gen_average()
from inspect import getgeneratorstate # 这个貌似是py3开始有的内置库,py2.7会报错
getgeneratorstate(coro_avg)  # 'GEN_SUSPENDED'
coro_avg.send(10)  # 10.0
coro_avg.send(4)  # 7.0


相关文章

  • python异步协程(aiohttp,asyncio)

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

  • asyncio + asyncio 异步编程实例

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

  • Python 协程

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

  • 协程

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

  • Python并发编程——协程

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

  • 协程介绍

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

  • 4-7

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • 协程

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • Python 协程 异步资料记录

    1. Python3.5协程原理 详细说明了Python协程产生的历史. 研究明白之后,写一篇文章,解释协程,并附...

  • 36.Python并发编程之协程

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

网友评论

      本文标题:python协程

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