diff options
author | jason kirtland <jek@discorporate.us> | 2017-08-29 09:33:08 -0700 |
---|---|---|
committer | jason kirtland <jek@discorporate.us> | 2017-08-29 10:06:09 -0700 |
commit | 873d165eb0a12445f06747fedb30cafd0d531e06 (patch) | |
tree | 6c0c945ab7d7de3de623a634315826a1b676be96 | |
parent | 638cbae12f60965053f53b61191d2541fbf605b8 (diff) | |
download | blinker-faster-noop-send.tar.gz |
Fix: Lower baseline cost of no-op signal send() & optional -O speedupfaster-noop-send
-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*. |