summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason kirtland <jek@discorporate.us>2017-08-29 09:33:08 -0700
committerjason kirtland <jek@discorporate.us>2017-08-30 09:40:39 -0700
commit42aad6110a02a86a9a51a77c75c2d638a50656b7 (patch)
tree478e2d3ceecdd9a38c44e9e9e16046c4c889b04f
parent56112f57c64520734d20bc158081a65527df32dc (diff)
downloadblinker-42aad6110a02a86a9a51a77c75c2d638a50656b7.tar.gz
Fix: Lower baseline cost of no-op signal send() & optional -O speedup
-rw-r--r--blinker/base.py15
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*.