Skip to content

Instantly share code, notes, and snippets.

@romainx
Last active April 27, 2018 06:36
Show Gist options
  • Save romainx/507ec6e4bf0e4cc49268660a3b4e06a8 to your computer and use it in GitHub Desktop.
Save romainx/507ec6e4bf0e4cc49268660a3b4e06a8 to your computer and use it in GitHub Desktop.
Blinker demo
# The only import needed
from blinker import signal
# Signals definition
number_generator_number = signal('number_generator_number', doc='Return a generated number')
number_generator_start = signal('number_generator_start', doc='The number generator has started')
number_generator_end = signal('number_generator_end', doc='The number generator has ended')
class NumberGenerator():
"""A dumb number generator"""
def __init__(self, name, bound):
self.name = name
self.bound = bound
self.counter = 0
def generate(self):
# Sending a simple signal
number_generator_start.send(self)
while self.counter < self.bound:
# Sending a signal with an associated data (the number generated)
number_generator_number.send(self, number=self.counter)
yield self.counter
self.counter += 1
# Informing that the generation has ended
number_generator_end.send(self)
def __repr__(self):
return self.name
# Connecting with a decorator a different method for the each signal
@number_generator_start.connect
def start_generation(sender):
print('{sender} started'.format(sender=sender))
@number_generator_number.connect
def print_number(sender, number):
print('Got [{number}] from {sender}'.format(number=number, sender=sender))
@number_generator_end.connect
def end_generation(sender):
print('{sender} ended'.format(sender=sender))
# Creating a generator
number_generator = NumberGenerator('Simple Generator', 5)
# Summing values
print('Sum is {result}'.format(result=sum(number_generator.generate())))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment