生成器和生成器并行(协程)

import time
#列表生成式

t=[i*2 for i in range(10)]

print(t)

print(t[8])

生成器:只有在调用的时候生成相应的数据,一种算法。

#只记住当前位置,只有一个_next_方法,取下一个值这个值就是当前值!。只能记住当前的!前面的数据不保存,后面的数据没生成。
c=(i*2 for i in range(100000000))
print(c)

#斐波那契
def fib(max):
n,a,b=0,0,1
while n<max:
#print(b)
yield b #这样做就是一个生成器(函数生成器)
a,b=b,a+b
n=n+1
return "done"

f=(fib(4)) #生成器调生成一个数据就中断,能进行其他操作
print(f.next())
print("干点其他的事")
print(f.next())

抓取异常

g=fib(6)
while True:
try:
x=next(g)
print("g:",x)
except StopIteration as e:
print("vlan:",e.value)
break

生成器并行,利用生成器调用中断做其他事再次调用。

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

def producer(name1,name2):
c=consumer(name1)
c2=consumer(name2)
c.next()
c2.next()
print("老子滴开始准备包子啦!")
for i in range(10):
time.sleep(1)
print("做了2个包子!一人一个!")
c.send(i) #把值传给yield并调用生成器
c2.send(i)

producer("alex","胡悦")

c=consumer("alex")

原文地址:http://blog.51cto.com/12992048/2176362

时间: 2024-11-10 13:46:51

生成器和生成器并行(协程)的相关文章

生成器与协程 | Python

# 生成器与协程 # 生成器是一种特殊的迭代器,它同样生成一个值的序列; # 如何定义生成器? # 方法一:函数中使用yield关键字; class count_down(n): while n>0: yield n n-=1 # 创建一个生成器对象 c = count_down(10) # __next__()方法调用生成器; >> c.__next__() 10 # 生成器对象提供了close()方法,来避免部分消耗; # 即:停止使用生成器时,就会自动调用close()方法; cl

Python函数进阶:闭包、装饰器、生成器、协程

返回目录 本篇索引 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++.Java.JavaScript等都实现或部分实现了闭包功能,很多高级应用都会依靠闭包实现. 一般专业文献上对闭包的定义都比较拗口,比如:“将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象称为闭包.” 其实,简单来说,你可以将闭包看成是一个轻载的类,这个类只有一个函数方法,并且只有为数不多的几个成员变量. 闭包的优点是:实现起来比类稍微轻巧一

Python 协程函数

1.1 协程函数理解 协程函数就是使用了yield表达式形式的生成器 def eater(name): print("%s eat food" %name) while True: food = yield print("done") g = eater("gangdan") print(g) 结果:generator object eater at 0x00000000028DC048这里就证明了g现在就是生成器函数 1. 2 协程函数赋值过程

玩转python(6)协程

多任务系统一般都需要解决一个问题:多个任务如何调度.抢占式调度就是一种很常见的任务调度机制.以单核模式下的进程调度为例,一个进程处于运行状态,其他的处于就绪队列,等到当前运行的进程放弃CPU的使用权,系统将CPU立刻分配给新到达的进程,由于任务的执行顺序是不确定的,看上去就像一堆任务在竞争CPU的使用权,所以这种多任务运行方式叫做"多任务竞争".与之对应的是非抢占式调度.当前任务会持续执行下去直到因为某些原因主动放弃CPU的使用权,各个任务的执行顺序是确定的,就像在互相协作,所以这种多

windows下多进程加协程并发模式

好久没更新博客了.正好最近要整理一下最近这段时间做过的项目以及学习python的一些心得.如标题所示,今天就来说说windows下多进程加协程并发模式.其实网上还是蛮多在linux下的多进程加协程并发模式,本身linux对python的支持更好吧.但是由于本人的开发环境是windows的,而且网上关于这方面的资料还是少了一点,不过经过一番折腾,也算是弄出来了.废话不多说,先贴代码吧: # coding=utf-8 # windows下多进程加协程并发模式 # 打入gevent的monkey补丁

协程与通道

进程:计算机进行资源分配调度的基本单位.且运行在自己内存空间内的独立执行体(一个应用程序就是运行在机器上的一个进程)线程:进程内部共享进程内存资源的多个执行体(当一个线程进行IO时,换另一个线程执行) 并行:同一个程序在某个时间点同时运行在多个处理器核心上.并发:同一时间段内,多个线程执行任务(提高ICU的时间使用率) 协程:根据一个或多个线程的可用性,映射到线程之上(Go tuntime中调度) 同步:进程的多个线程(或者协程)中数据一致 协程工作在相同的地址空间中,所以共享内存(sync包)

【转】PHP生成器 (generator)和协程的实现

原文地址:https://phphub.org/topics/1430 1.一切从 Iterator 和 Generator 开始 为便于新入门开发者理解,本文一半篇幅是讲述迭代器接口(Iterator)和 Generator 类的,对此已经理解的话,可以直接跳过. 在理解本文大多数概念前,有必要知道迭代和迭代器.事实上,迭代大家都知道是什么,可是我不知道(真的,在此之前对这个概念没有系统了解).迭代是指反复执行一个过程,每执行一次叫做一次迭代.实际上我们经常做这种事情,比如: <?php $m

Python生成器:单线程协程

1 #author F 2 3 #单线程下的并行效果 (生成器) 4 #协程 5 6 import time 7 def consumer(name): 8 print("%s 准备吃包子啦" %name) 9 while True: 10 baozi = yield 11 print("包子%s来啦 被%s吃啦!" %(baozi, name)) 12 13 c = consumer("WW") #此时的consumer已经不是函数 他是一个生

【Python】【控制流程】【生成器 | 协程 | 期物 | 任务】对比与联系

Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyncio 是并发(concurrency)的一种方式.对 Python 来说,并发还可以通过线程(threading)和多进程(multiprocessing)来实现. Asyncio 并不能带来真正的并行(parallelism).当然,因为 GIL(全局解释器锁)的存在,Python 的多线程也不

迭代器--》生成器--》协程的关系与区别

1.迭代器(iterator) 是一个实现了迭代器协议的对象,python的一些内置数据类型(列表,数组,字符串,字典等)都可以通过for语句进行迭代,我们也可以自己创建一个容器,实现了迭代器协议,可以通过for,next方法进行迭代,在迭代的末尾,会引发stopIteration异常. 判断xxx_obj是否可以迭代 在第1步成立的前提下,调用 iter 函数得到 xxx_obj 对象的 __iter__ 方法的返回值 __iter__ 方法的返回值是一个迭代器 如果想要一个对象称为一个 可以