[New-bugs-announce] [issue30490] Allow pass an exception to the Event.set method

pfreixes report at bugs.python.org
Fri May 26 16:59:34 EDT 2017


New submission from pfreixes:

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)

----------
components: asyncio
messages: 294572
nosy: pfreixes, yselivanov
priority: normal
severity: normal
status: open
title: Allow pass an exception to the Event.set method
versions: Python 3.7

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue30490>
_______________________________________


More information about the New-bugs-announce mailing list