Path: csiph.com!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Marko Rauhamaa Newsgroups: comp.lang.python Subject: Re: asyncio - how to stop background task cleanly Date: Sat, 06 Feb 2016 22:37:06 +0200 Organization: A noiseless patient Spider Lines: 28 Message-ID: <8737t5shhp.fsf@elektro.pacujo.net> References: <87lh6ys052.fsf@elektro.pacujo.net> <87fux5svhk.fsf@elektro.pacujo.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: mx02.eternal-september.org; posting-host="b7cb1518d23ec19d482dcc9c31d30fdd"; logging-data="28052"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18r5mHUJpwvUYsv8axcKWFD" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Cancel-Lock: sha1:vXM/0ZesERRF9UV0tzsKKgTsdqU= sha1:DUhKf8RVfDGrUV2PvvZH6e3ShpA= Xref: csiph.com comp.lang.python:102596 Marko Rauhamaa : > async def background_task(cancel_event): > while True: > await asyncio.wait( > perform_task, cancel_event.wait, > return_when=asyncio.FIRST_COMPETED) > if cancel_event_is_set() > break > await asyncio.wait( > cancel_event.wait, timeout=10, > return_when=asyncio.FIRST_COMPETED) > if cancel_event_is_set() > break [Typo: cancel_event_is_set() ==> cancel_event.is_set().] Actually, cancellation is specially supported in asyncio () so this should do: async def background_task(): while True: await perform_task() await asyncio.sleep(10) Marko