[Python-Dev] PEP 492: No new syntax is required (original) (raw)
Mark Shannon mark at hotpy.org
Mon Apr 27 10:09:53 CEST 2015
- Previous message (by thread): [Python-Dev] PEP 492: No new syntax is required
- Next message (by thread): [Python-Dev] PEP 492: No new syntax is required
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 26/04/15 23:24, Nick Coghlan wrote:
On 27 Apr 2015 07:50, "Mark Shannon" <mark at hotpy.org_ _<mailto:mark at hotpy.org>> wrote: > On 26/04/15 21:40, Yury Selivanov wrote: >> >> But it's hard. Iterating through something asynchronously? Write a >> 'while True' loop. Instead of 1 line you now have 5 or 6. Want to >> commit your database transaction? Instead of 'async with' you will >> write 'try..except..finally' block, with a very high probability to >> introduce a bug, because you don't rollback or commit properly or >> propagate exception. > > I don't see why you can't do transactions using a 'with' statement. Because you need to pass control back to the event loop from the exit method in order to wait for the commit/rollback operation without blocking the scheduler. The "with (yield from cm())" formulation doesn't allow either enter or exit to suspend the coroutine to wait for IO, so you have to do the IO up front and return a fully synchronous (but still non-blocking) CM as the result. True. The 'with' statement cannot support this use case, but try-except can do the job:
trans = yield from db_conn.transaction() try: ... except: yield from trans.roll_back() raise yield from trans.commit()
Admittedly not as elegant as the 'with' statement, but perfectly readable.
We knew about these problems going into PEP 3156 (http://python-notes.curiousefficiency.org/en/latest/pepideas/asyncprogramming.html#using-special-methods-in-explicitly-asynchronous-code) so it's mainly a matter of having enough experience with asyncio now to be able to suggest specific syntactic sugar to make the right way and the easy way the same way. asyncio is just one module amongst thousands, does it really justify special syntax?
Cheers, Mark.
- Previous message (by thread): [Python-Dev] PEP 492: No new syntax is required
- Next message (by thread): [Python-Dev] PEP 492: No new syntax is required
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]