I wonder if Nathaniel has something to add? Trio has a different approayto cancellation. Of course it is also an entirely new library...
On Tue, Jul 30, 2019 at 9:51 PM <aurelien.lambert...@gmail.com> wrote: > Oh only now it appears in the list ! I thought the post hadn't working, so > I posted again :/. > > I've fixed my "library" ( > https://github.com/aure-olli/aiokafka/blob/3acb88d6ece4502a78e230b234f47b90b9d30fd5/syncio.py), > and the `wrapped_consumer2` function. Now no double await, so no risk of > afterward cancellation. > > stop_future = asyncio.Future() > async def wrapped_consumer2(): > task = asyncio.ensure_future(consume_data()) > try: > await asyncio.wait([task, stop_future]) > finally: > task.cancel() > if not task.cancelled(): > return task.result() > else: > raise RuntimeError('stopped') > > Or > > import syncio > > async def wrapped_consumer(): > task = syncio.ensure_sync_future(consume_data()) > return await task > > stop_future = asyncio.Future() > async def wrapped_consumer2(): > task = syncio.ensure_sync_future(consume_data()) > try: > await syncio.sync_wait([task, stop_future]) > finally: > task.cancel() > if not task.cancelled(): > return task.result() > else: > raise RuntimeError('stopped') > > My only concern is that consistent cancellation state is currently almost > impossible with futures and tasks. The only two possibilities are either to > ignore cancellation (highly counter intuitive to use), or to directly > manipulate the coroutine as a generator (basically rewriting asyncio). > > Could be another library for sure, but the current state of asyncio makes > it really hard to reuse it. So it would mean copy-pasting the whole library > while changing few lines here and there. > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/4GROXASMFVVRG3UDB4LVMDXOQPU3KH5V/ > Code of Conduct: http://python.org/psf/codeofconduct/ > -- --Guido (mobile)
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/VMRGZQT6TX5TPEB2OKLLRMREW3SZCXNF/ Code of Conduct: http://python.org/psf/codeofconduct/