CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
jackfrued

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: jackfrued/Python-100-Days
Path: blob/master/Day01-15/code/Day13/coroutine2.py
Views: 729
1
"""
2
使用协程 - 查看协程的状态
3
4
Version: 0.1
5
Author: 骆昊
6
Date: 2018-03-21
7
"""
8
9
from time import sleep
10
from inspect import getgeneratorstate
11
12
13
def build_deliver_man(man_id):
14
total = 0
15
while True:
16
total += 1
17
print('%d号快递员准备接今天的第%d单.' % (man_id, total))
18
pkg = yield
19
print('%d号快递员收到编号为%s的包裹.' % (man_id, pkg))
20
sleep(0.5)
21
22
23
def package_center(deliver_man, max_per_day):
24
num = 1
25
# 创建状态(GEN_CREATED) - 等待开始执行
26
print(getgeneratorstate(deliver_man))
27
deliver_man.send(None)
28
# 挂起状态(GEN_SUSPENDED) - 在yield表达式处暂停
29
print(getgeneratorstate(deliver_man))
30
# next(deliver_man)
31
while num <= max_per_day:
32
package_id = 'PKG-%d' % num
33
deliver_man.send(package_id)
34
num += 1
35
deliver_man.close()
36
# 结束状态(GEN_CLOSED) - 执行完毕
37
print(getgeneratorstate(deliver_man))
38
print('今天的包裹派送完毕!')
39
40
41
dm = build_deliver_man(1)
42
package_center(dm, 10)
43
44