This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Allow pass an exception to the Event.set method
Type: Stage: resolved
Components: asyncio Versions: Python 3.7
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: Nosy List: pfreixes, yselivanov
Priority: normal Keywords:

Created on 2017-05-26 20:59 by pfreixes, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 1824 closed pfreixes, 2017-05-26 21:03
Messages (2)
msg294572 - (view) Author: pfreixes (pfreixes) * Date: 2017-05-26 20:59
Having the Event as the way to synchronize 1:N coroutines, the none happy path should be able to be expressed making possible call the `set_exception` for each future related to each waiter.

As an example the following code trying to implement a way to avoid the dogpile effect for a DNS cache. If the coro that holds the event fails, the original exception is also broadcasted to the waiters.


if key in throttle_dns_events:
    yield from throttle_dns_events[key].wait()
else:
    throttle_dns_events[key] = Event(loop=loop)
    try:
        addrs = yield from \
            resolver.resolve(host, port, family=family)
        cached_hosts.add(key, addrs)
        throttle_dns_events[key].set()
    except Exception as e:
        # any DNS exception, independently of the implementation
        # is set for the waiters to raise the same exception.
        throttle_dns_events[key].set(exc=e)
        raise
    finally:
        throttle_dns_events.pop(key)
msg298688 - (view) Author: pfreixes (pfreixes) * Date: 2017-07-19 20:47
More info about why here https://github.com/python/cpython/pull/1824#issuecomment-315903808
History
Date User Action Args
2022-04-11 14:58:46adminsetgithub: 74675
2017-07-19 20:48:00pfreixessetstatus: open -> closed
resolution: rejected
messages: + msg298688

stage: resolved
2017-05-26 21:03:53pfreixessetpull_requests: + pull_request1911
2017-05-26 20:59:34pfreixescreate