yield实现单线程异步

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018-01-22 22:09 # @Author :  hhj# @Site :  # @File : yield单线程异步.pyimport  time

def consumer(name):    print("%s 准备吃包子啦" %name)    while True:        baozi = yield  #接收值         print("包子[%s]来了,被[%s]吃了!" %(baozi,name))

def producer(name):    c = consumer("A")    c2 = consumer("B")    c.__next__()       c2.__next__()    print("我开始准备做包子了")    for i in range(10):        time.sleep(1)        print("做了两个包子")        c.send(i) #发送值        c2.send(i)

producer("hhj")

原文地址:https://www.cnblogs.com/hhjwqh/p/8331472.html

时间: 2024-09-29 18:49:00

yield实现单线程异步的相关文章

【Python】迭代器、生成器、yield单线程异步并发实现详解

转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从理论+程序调试验证的方式详细讲解这部分知识,话不多说,直接进入主题. 一.迭代器(Iterater):     首先介绍迭代器,迭代器是访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.是不是觉得跟for循环很像?但是迭代器有几个特性需记住:    1.访问者

一个简单的单线程异步服务器

使用内select模块构造单线程异步服务器 关键: poll(),生成器 服务器模块: #!/usr/bin/env python3 #-*- encoding:UTF -*- import argparse,socket,time aphorisms = {b'Beautiful is better than?':b'Ugly.', b'Explicit is better than?':b'Implicit.', b'Simple is better than?':b'Complex.'}

node 单线程异步非阻塞

链接:http://www.runoob.com/nodejs/nodejs-callback.html 首先什么是单线程异步非阻塞? 单线程的意思整个程序从头到尾但是运用一个线程,程序是从上往下执行的.异步操作就是程序虽然是从上到下执行的,但是某个函数执行时间过长时并不会阻塞在那里等待它执行完,然后在执行下面的代码.非阻塞也就是这个意思. 为什么node是异步非阻塞的呢,得力于回调函数,还有js中的定时器也是经典的异步操作. ###4.1 Node.js异步机制 由于异步的高效性,node.j

单线程异步回调机制的缺陷与node的解决方案

一.node单线程异步的缺陷: 单线程异步的优点自然不必多说,node之所以能够如此快的兴起,其单线程异步回调机制相比于传统同步执行编程语言的优势便是原因之一.然而,开发一个node程序,其缺陷也是不可忽视的: 二.node解决方案: 1.node实现访问和错误日志: morgan是一个http请求处理的中间件 2.node cluster模块支持开启多个工作进程充分调用cpu资源,也能防止bug使node进程奔溃: app.js修改: 新建cluster.js: 命令行执行: 注:superv

通过生成器yield实现单线程的情况下实现并发运算效果(异步IO的雏形)

一.协程: 1.生成器只有在调用时才会生成相应的数据 2.调用方式有 " str__next__.()   str.send() ", 3.并且每调用一次就产生一个值调用到最后一个值后会报错 4.报错可用try和except做异常处理 注意: next:是直接调用yield,并不会传值. send:是调用并直接传值给yield. 1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 # Author:Dong Ye 4 5 6 ''' 7

单线程 异步 同步 阻塞 非阻塞

Javascript是单线程的深入分析 首先一个引子:为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的? 先看例子1: 1 function foo() { 2 console.log( 'first' ); 3 setTimeout( ( function(){ console.log( 'second' ); } ), 5); 4 } 5 for (var i = 0; i < 1000000; i++) { 6 foo();

javascript的单线程异步机制探究

JavaScript的同步异步模式 JavaScript的语言执行环境都是单线程.单线程就是想排队那样任务需要按顺序一个一个的完成.这种模式的好处是实现起来简单,但是坏处就是如果队列中有一个任务耗费时间很长,那后边的任务就必须等前一个执行完,会拖延整个程序的执行. 为了优化这个问题,JavaScript语言将任务的执行模式分成两种,同步(Synchronous)和异步(Asynchronous). 同步模式就是后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的.同步

如何理解node是单线程异步I/O

I/O: 指的是设备与cpu连接的接口电路的操作 异步: 就是不用等一个操作完成,而是去执行其他代码,等操作完成之后再去执行那个操作的结果, nodeJS使用回调函数来实现的 单线程:在实现异步操作时有很多解决办法,Apache的解决办法是多线程,应该说很多编程语言都使用了多线程,但是在后来的测试和实际应用中, 多线程程序在超过一万人时性能急剧下降,因为创建一个新线程是很耗性能能,即使多线程会把CPU利用到极致但也不能解决过多的人来访问.所以 node的单线程就成为它璀璨的亮点.而且它的回调和它

单线程+异步协程

event_loop:事件循环,相当于一个无限循环(不清楚循环多少次),我们可以把一些特殊函数注册(放置)到这个事件循环上,当满足某些条件的时候,函数就会被循环执行.程序是按照设定的顺序从头执行到尾,运行的次数也是完全按照设定.当在编写异步程序时,必然其中有部分程序的运行耗时是比较久的,需要先让出当前程序的控制权,让其在背后(挂起)运行,让另一部分的程序先运行起来.当背后运行的程序完成后,也需要及时通知主程序已经完成任务可以进行下一步操作,但这个过程所需的时间是不确定的,需要主程序不断的监听状态