python coroutine

前言

OOAD课程是用python教的,其中涉及到大量的python语法糖,老师也算是手把手教如何写出OO的python,但一个学期没听课只能期末补一补。

Coroutines

Coroutines are similar to generators with a few differences. The main differences are:

generators are data producers generators制造数据

coroutines are data consumers coroutines消费数据

来看第一个代码示例,通过send()接收数据,然后进行比对,找出含有关键字的数据并打印。

def grep(pattern):

print("Searching for", pattern)

while True:

line = (yield)

if pattern in line:

print(line)

search = grep('coroutine')

next(search)

# Output: Searching for coroutine

search.send("I love you")

search.send("Don't you love me?")

search.send("I love coroutines instead!")

很明显我们可以看到,yield关键字在这里已经从返回数据的变为接收数据的。也就是,Python的yield不但可以返回一个值,它还可以接收调用者发出的参数。

在中文里,coroutine对应的是协程,但是显然老师的重点不是什么同步异步,而是yield,以及coroutine和subprogram的区别。

Subprogram vs Coroutine, is (programming) a piece of code that performs a task, and that can be passed new input and return output more than once. As nouns the difference between subroutine and coroutine is that subroutine is (computer science) a section of code, called by the main body of a program, that implements a task while coroutine is (programming) a piece of code that performs a task, and that can be passed new input and return output more than once.

放上老师PPT的测试代码就收工:

def coroutine(y):

for i in range(y):

x = yield i

print("i=%d , x=%d " % (i, x))

c = coroutine(4)

next(c)

c.send(10)

c.send(20)

c.send(30)

def echo():

just_received='nothing'

try:

while True:

received=yield just_received

just_received=received

print('I got {}.'.format(just_received))

except GeneratorExit:

# when closed with close()

print('Coroutine closed!')

g = echo()

next(g)

g.send('test1')

g.send('test2')

g.close()

Reference

python coroutine_python coroutine相关推荐

  1. python coroutine_Python coroutine的坑

    目前有个后端worker用的python 2.7写的,一次起10个gen.coroutine来跑黑盒的代码,这些代码很多是在做HTTP request. 在server端发现这些来自worker的la ...

  2. python coroutine_python coroutine的学习跟总结[转]

    简介 因为最近一段时间需要研究一些openstack相关的东西,在阅读一些相关代码的时候碰到很多python特定的一些特性,比如generator, coroutine以及一些相关的类库,比如even ...

  3. python coroutine_python coroutine的学习和总结

    简介 因为最近一段时间需要研究一些openstack相关的东西,在阅读一些相关代码的时候碰到很多python特定的一些特性,比如generator, coroutine以及一些相关的类库,比如even ...

  4. PYTHON 之 COROUTINE

    参考资料 资料 https://blog.csdn.net/andybegin/article/details/77884645 http://python.jobbole.com/86481/ ht ...

  5. just函数 python_在python里写Monad

    这段时间写微信小程序看见callback hell非常炸毛,而且确实我不熟悉js的各种衍生工具(async/await, promise),想着python的coroutine是yield模改出来的, ...

  6. python的前端框架_web前端三大主流框架之Python异步框架如何工作?

    这篇文章我们从 socket 编程的例子来看看 Python 异步框架是如何工作的,需要了解下简单的 socket 编程以及 Linux 提供的 I/O 复用机制. Python 异步框架也是基于操作 ...

  7. python中data.find_all爬取网站为空列表_利用Golang快速爬取盗版网站的整套音频

    01 前言 最近因为 Zigma 帮我写了个推广 Catcher 小程序软文的原因,答应了他帮他爬了一个盗版音频网站的整套 <李淼谈奇案> . 在制作爬虫脚本的过程中,也是遇到了一些有趣的 ...

  8. 从无栈协程到C++异步框架

    导语 在前面的文章中我们尝试从 C++17 和 C++20 的角度分别探讨过其中无栈协程的包装机制和使用, 但其中的设计由来, 原理, 剥析的并不多. 这也导致对相关特性不太熟悉的读者要理解相关内容存 ...

  9. 从无栈协程到 C++异步框架

    作者:fangshen,腾讯 IEG 游戏客户端开发工程师 导语 本文我们将尝试对整个 C++的协程做深入浅出的剥析, 方便大家的理解. 再结合上层的封装, 最终给出一个 C++异步框架实际业务使用的 ...

最新文章

  1. 三角形周长最短问题_谈“最短”
  2. python字符串格式化方法 format函数的使用
  3. 平衡二叉树AVL删除
  4. jquery选择器连续选择_JQuery中的选择器
  5. 第 190 场力扣周赛
  6. 谷歌Pixel 6系列手机发布会官宣定档 10月19日发布
  7. 问题-Delphi7中JSON遍历节点不支持使用IN处理方法?
  8. 2020年最新的PHP面试题(附答案)
  9. Synchronous Bidirectional Inference for Neural Sequence Generation
  10. dp规划之矩阵连乘问题
  11. xampp使用教程php,php集成套件服务器xampp安装使用教程
  12. 合成器与电子音乐词语解释-比较齐全版
  13. 智慧园区SaaS管理系统解决方案:赋能园区实现信息化、数字化管理
  14. oracle优化方法,九大Oracle性能优化基本方法详解
  15. eclipse的优缺点
  16. ARM 电源管理 4种模式
  17. 计算机显示器的视频接口有什么不同,电脑显示器用VGA还是HDMI好有什么区别
  18. 电脑双核CPU具体是什么意思?
  19. Linux 命令随笔
  20. R语言主成分分析总结

热门文章

  1. 猎头职场:摆脱老实人的几点
  2. 最新系统漏洞--Victor CMS任意文件上传漏洞
  3. 【Redis】缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存击穿、缓存降级
  4. JQ-页面的上一页下一页切换
  5. Eigen库中的Identity()函数作用
  6. 用友UAP-studio启动项目时如何修改启动端口
  7. Vivado从此开始(进阶篇)读书笔记——跨时钟处理
  8. 【调试】ChromeDevTool高级调式
  9. Install Chrome Dev
  10. java中的Map遍历方式总结