Cory wrote:

"What’s not entirely clear to me is why we need __aexit__ to *actually* be an 
async function. The example in curio is socket closure, which seems to be like 
it absolutely does not need to be awaitable."

Curio uses asynchronous context managers for much more than closing sockets 
(which frankly is the least interesting thing).   For example, they're used 
extensively with synchronization primitives such as Locks, Semaphores, Events, 
Queues, and other such things.   The ability to use coroutines in the 
__aexit__() method is an essential part of these primitives because it allows 
task scheduling decisions to be made in conjunction with synchronization events 
such as lock releases.   For example, you can implement fair-locking or various 
forms of priority scheduling.   Curio also uses asynchronous context managers 
for timeouts and other related functionality where coroutines have to be used 
in __aexit__.  I would expect coroutines in __aexit__ to also be useful in more 
advanced contexts such as working with databases, dealing with transactions, 
and other kinds of processing where asynchronous I/O might be involved.

As such, I think it's pretty useful to allow coroutines in __aexit__() and 
would be strongly opposed to restricting it.

-Dave

_______________________________________________
Async-sig mailing list
Async-sig@python.org
https://mail.python.org/mailman/listinfo/async-sig
Code of Conduct: https://www.python.org/psf/codeofconduct/

Reply via email to