Skip to content

Instantly share code, notes, and snippets.

@axiaoxin
Created December 21, 2017 02:49
Show Gist options
  • Select an option

  • Save axiaoxin/756ba06f6c00f2729cd20f0a67aa5d10 to your computer and use it in GitHub Desktop.

Select an option

Save axiaoxin/756ba06f6c00f2729cd20f0a67aa5d10 to your computer and use it in GitHub Desktop.
yield协程
# -*- coding: utf-8 -*-
import random
def get_data():
"""返回0到9之间的3个随机数,模拟异步操作"""
return random.sample(range(10), 3)
def consume():
"""显示每次传入的整数列表的动态平均值"""
running_sum = 0
data_items_seen = 0
while True:
print('Waiting to consume')
data = yield
data_items_seen += len(data)
running_sum += sum(data)
print('Consumed, the running average is {}'.format(running_sum / float(data_items_seen)))
def produce(consumer):
"""产生序列集合,传递给消费函数(consumer)"""
while True:
data = get_data()
print('Produced {}'.format(data))
consumer.send(data)
yield
if __name__ == '__main__':
consumer = consume()
print 'send None'
consumer.send(None)
producer = produce(consumer)
for _ in range(10):
print('Producing...')
next(producer)
@axiaoxin
Copy link
Author

send None
Waiting to consume
Producing...
Produced [4, 2, 7]
Consumed, the running average is 4.33333333333
Waiting to consume
Producing...
Produced [7, 2, 0]
Consumed, the running average is 3.66666666667
Waiting to consume
Producing...
Produced [5, 3, 2]
Consumed, the running average is 3.55555555556
Waiting to consume
Producing...
Produced [9, 7, 4]
Consumed, the running average is 4.33333333333
Waiting to consume
Producing...
Produced [4, 5, 3]
Consumed, the running average is 4.26666666667
Waiting to consume
Producing...
Produced [3, 6, 0]
Consumed, the running average is 4.05555555556
Waiting to consume
Producing...
Produced [2, 9, 4]
Consumed, the running average is 4.19047619048
Waiting to consume
Producing...
Produced [2, 5, 6]
Consumed, the running average is 4.20833333333
Waiting to consume
Producing...
Produced [2, 9, 5]
Consumed, the running average is 4.33333333333
Waiting to consume
Producing...
Produced [7, 8, 4]
Consumed, the running average is 4.53333333333
Waiting to consume

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment