diff options
author | jason kirtland <jek@discorporate.us> | 2017-08-29 09:33:08 -0700 |
---|---|---|
committer | jason kirtland <jek@discorporate.us> | 2017-08-30 09:40:39 -0700 |
commit | 42aad6110a02a86a9a51a77c75c2d638a50656b7 (patch) | |
tree | 478e2d3ceecdd9a38c44e9e9e16046c4c889b04f | |
parent | 56112f57c64520734d20bc158081a65527df32dc (diff) | |
download | blinker-42aad6110a02a86a9a51a77c75c2d638a50656b7.tar.gz |
Fix: Lower baseline cost of no-op signal send() & optional -O speedup
-rw-r--r-- | blinker/base.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/blinker/base.py b/blinker/base.py index cc5880e..3fd77d8 100644 --- a/blinker/base.py +++ b/blinker/base.py @@ -250,6 +250,14 @@ class Signal(object): :param \*\*kwargs: Data to be sent to receivers. """ + if not self.receivers: + # Ensure correct signature even on no-op sends, disable with -O + # for lowest possible cost. + if __debug__ and sender and len(sender) > 1: + raise TypeError('send() accepts only one positional ' + 'argument, %s given' % len(sender)) + return [] + # Using '*sender' rather than 'sender=None' allows 'sender' to be # used as a keyword argument- i.e. it's an invisible name in the # function signature. @@ -260,11 +268,8 @@ class Signal(object): '%s given' % len(sender)) else: sender = sender[0] - if not self.receivers: - return [] - else: - return [(receiver, receiver(sender, **kwargs)) - for receiver in self.receivers_for(sender)] + return [(receiver, receiver(sender, **kwargs)) + for receiver in self.receivers_for(sender)] def has_receivers_for(self, sender): """True if there is probably a receiver for *sender*. |