spacepaste

  1.  
  2. import asyncio
  3. from itertools import count
  4. async def position_stream():
  5. try:
  6. for position in count():
  7. await asyncio.sleep(1)
  8. yield position
  9. finally:
  10. print("position stream cancelled")
  11. async def altitude_stream():
  12. try:
  13. for altitude in count():
  14. await asyncio.sleep(1)
  15. yield altitude
  16. finally:
  17. print("altitude stream cancelled")
  18. async def print_position():
  19. async for position in position_stream():
  20. print(f"position: {position}")
  21. if position == 2:
  22. cleanup()
  23. async def print_altitude():
  24. async for altitude in altitude_stream():
  25. print(f"altitude: {altitude}")
  26. def cleanup():
  27. loop = asyncio.get_event_loop()
  28. asyncio.ensure_future(loop.shutdown_asyncgens())
  29. loop.close()
  30. if __name__ == '__main__':
  31. try:
  32. asyncio.ensure_future(print_position())
  33. asyncio.ensure_future(print_altitude())
  34. asyncio.get_event_loop().run_forever()
  35. except KeyboardInterrupt:
  36. pass
  37.