-
- import asyncio
- from itertools import count
-
- async def position_stream():
- try:
- for position in count():
- await asyncio.sleep(1)
- yield position
- finally:
- print("position stream cancelled")
-
- async def altitude_stream():
- try:
- for altitude in count():
- await asyncio.sleep(1)
- yield altitude
- finally:
- print("altitude stream cancelled")
-
- async def print_position():
- async for position in position_stream():
- print(f"position: {position}")
-
- if position == 2:
- cleanup()
-
- async def print_altitude():
- async for altitude in altitude_stream():
- print(f"altitude: {altitude}")
-
- def cleanup():
- loop = asyncio.get_event_loop()
- asyncio.ensure_future(loop.shutdown_asyncgens())
- loop.close()
-
- if __name__ == '__main__':
- try:
- asyncio.ensure_future(print_position())
- asyncio.ensure_future(print_altitude())
- asyncio.get_event_loop().run_forever()
- except KeyboardInterrupt:
- pass
-