Hi all

It is easy enough to set up a task to run in the background every 10 seconds using asyncio -

   async def background_task():
       while True:
           await perform_task()
           await asyncio.sleep(10)

   asyncio.ensure_future(background_task())

When shutting the main program down, I want to stop the task, but I cannot figure out how to stop it cleanly - i.e. wait until it has finished the current task and possibly performed some cleanup, before continuing.

   async def background_task():
       await perform_setup()
       while condition:
           await perform_task()
           await asyncio.sleep(10)
       await perform_cleanup()

Previously I would run the task in another thread, then set a flag to tell it to stop, then join() the thread which would block until the task had finished. I used threading.Event as the flag, which allows it to 'sleep' using wait() with a timeout value, but reacts instantly when set() is called, so it was ideal.

Is there a way to achieve this using asyncio?

Thanks

Frank Millman


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to