classCounter(object):def__init__(self, x=0):
self.x = x
counter = Counter()defused_iter():
counter.x +=2return counter.x
for i initer(used_iter,8):print(i)
defmyYield(n):while n >0:print('开始生成....:')yield n
print('完成一次...')
n -=1if __name__ =='__main__':
my_yield = myYield(3)print('已经实例化生成器对象')
my_yield.__next__()print('第二次调用__next__()方法:')
my_yield.__next__()
defmyYield(n):while n >0:
rcv =yield n
n -=1if rcv isnotNone:
n = rcv
if __name__ =='__main__':
my_yield = myYield(3)print(my_yield.__next__())print(my_yield.__next__())
1
2
3
4
5
6
7
8
9
10
11
12
生成器与协程
采用一般的方法来实现生产者与消费者这个传统的并发与同步程序设计问题,通过生成器实现
例子:生产者模型
defconsumer():print('等待接受处理任务....')whileTrue:
data =(yield)print('收到任务:', data)defproducer():
c = consumer()
c.__next__()for i inrange(3):print('发送一个任务....','任务%d'% i)
c.send('任务%d'% i)if __name__ =='__main__':
producer()