Skip to content

Instantly share code, notes, and snippets.

@Desttro
Forked from TFlexSoom/try-finally-yield.py
Created March 17, 2022 06:14
Show Gist options
  • Select an option

  • Save Desttro/3684a16f02b5d3ada3fb78111c6afdeb to your computer and use it in GitHub Desktop.

Select an option

Save Desttro/3684a16f02b5d3ada3fb78111c6afdeb to your computer and use it in GitHub Desktop.
Try Finally Testing With Asynchronous and Synchronous Generators
import time
import logging
import asyncio
def get_generator():
try:
yield "hello there!"
finally:
logging.info("Finally Block Has Been Run!")
async def get_generator_async():
try:
await asyncio.sleep(1)
yield "hello there!"
finally:
logging.info("Finally Block Has Been Run!")
async def use_gen_and_exit():
var = await get_generator_async().asend(None)
logging.info("printing Var!")
logging.info(var)
logging.info("Done printing Var!")
time.sleep(1)
logging.info("exitting")
async def use_gen_and_wait_and_exit():
var = await get_generator_async().asend(None)
time.sleep(1)
logging.info("printing Var!")
logging.info(var)
logging.info("Done printing Var!")
time.sleep(1)
logging.info("exitting")
async def use_gen_inner_and_cough():
logging.info("Entering Inner Loop")
await use_gen_and_exit()
logging.info("Exiting Outter Loop")
def main():
format = "%(asctime)s: %(message)s"
logging.basicConfig(format=format, level=logging.INFO,
datefmt="%H:%M:%S")
gen = get_generator()
var = next(gen)
logging.info(var)
logging.info("Moving on to other calls")
asyncio.run(use_gen_and_exit())
asyncio.run(use_gen_and_wait_and_exit())
asyncio.run(use_gen_inner_and_cough())
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment