EventEmitter with gevent
This module implements EventEmitter with gevent.
Installation
To install the latest release from pypi
:
pip install gevent-eventemitter
Usage
EventEmitter
can be used as mixin, or on it's own. Here is an example as mixin:
from eventemitter import EventEmitter
class MyClass(EventEmitter):
pass
instance = MyClass()
Registering a callback
def do_stuff():
print "Hello world!"
instance.on('my event', do_stuff)
instance.emit('my event')
Or as decorator
@instance.on('my event')
def do_stuff():
print "Hello world!"
With once
the callback will be called, you guessed it, only once.
@instance.once('my event')
def do_stuff(var):
print "Hello %s!" % var
instance.emit('my event', 'Earth') # arguments can be passed along events
instance.emit('my event') # do_stuff won't be called
- It's possible to block wait for an event.
- If there are event arguments they will be returned as a
tuple
my_args = instance.wait_event('my event')
my_args = instance.wait_event('my event', timeout=5) # wait at most 5seconds
On timeout wait_event
will return None
, or raise gevent.Timeout
if raises=True
my_args = instance.wait_event('my event', timeout=5)
if my_args is None:
print "Timeout!"
try:
my_args = instance.wait_event('my event', timeout=5, raises=True)
except gevent.Timeout:
print "Timeout!"
To remove a callback, or all callbacks.
instance.remove_listener('my event', do_stuff)
instance.remove_all_listeners() # absolutely all listeners
instance.remove_all_listeners('my event') # all listners for the event
Listening for None
event will result in catching all events.