Created
December 21, 2017 02:49
-
-
Save axiaoxin/756ba06f6c00f2729cd20f0a67aa5d10 to your computer and use it in GitHub Desktop.
yield协程
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- 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) |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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