coroutine2.py 1.0 KB

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