Skip to content

Instantly share code, notes, and snippets.

@pavelpatrin
Created January 1, 2021 13:18
Show Gist options
  • Select an option

  • Save pavelpatrin/5bc22ccec50d73b348cf0fa2b5690fa9 to your computer and use it in GitHub Desktop.

Select an option

Save pavelpatrin/5bc22ccec50d73b348cf0fa2b5690fa9 to your computer and use it in GitHub Desktop.

Revisions

  1. pavelpatrin created this gist Jan 1, 2021.
    36 changes: 36 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    import logging
    import threading
    import time
    import typing


    def generator():
    time.sleep(5)
    yield 123
    return 456


    def in_thread_1(g: typing.Generator):
    logging.info("before send")
    g.send(None)
    logging.info("after send")


    def in_thread_2(g: typing.Generator):
    time.sleep(0.1)

    logging.info("before close")
    g.close() # ValueError: generator already executing
    logging.info("after close")


    if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG, format="%(asctime)s;%(levelname)s;%(message)s")

    gen = generator()

    thread = threading.Thread(target=in_thread_1, args=(gen,))
    thread.start()

    thread = threading.Thread(target=in_thread_2, args=(gen,))
    thread.start()