A Python EventBus
Project description
pyeventbus is a publish/subscribe event bus for Python 2.7.
simplifies the communication between python classes
decouples event senders and receivers
performs well threads, greenlets, queues and concurrent processes
avoids complex and error-prone dependencies and life cycle issues
makes code simpler
has advanced features like delivery threads, workers and spawning different processes, etc.
is tiny (3KB archive)
pyeventbus in 3 steps:
Define events:
class MessageEvent: # Additional fields and methods if needed def __init__(self): pass
Prepare subscribers: Declare and annotate your subscribing method, optionally specify a thread mode:
from pyeventbus import * @subscribe(onEvent=MessageEvent) def func(self, event): # Do something pass
Register your subscriber. For example, if you want to register a class in Python:
from pyeventbus import * class MyClass: def __init__(self): pass def register(self, myclass): PyBus.Instance().register(myclass, self.__class__.__name__) # then during initilization myclass = MyClass() myclass.register(myclass)
Post events:
from pyeventbus import * class MyClass: def __init__(self): pass def register(self, myclass): PyBus.Instance().register(myclass, self.__class__.__name__) def postingAnEvent(self): PyBus.Instance().post(MessageEvent()) myclass = MyClass() myclass.register(myclass) myclass.post()
Modes: pyeventbus can run the subscribing methods in 5 different modes
POSTING:
Runs the method in the same thread as posted. For example, if an event is posted from main thread, the subscribing method also runs in the main thread. If an event is posted in a seperate thread, the subscribing method runs in the same seperate method This is the default mode, if no mode has been provided:: @subscribe(threadMode = Mode.POSTING, onEvent=MessageEvent) def func(self, event): # Do something pass
PARALLEL:
Runs the method in a seperate python thread:: @subscribe(threadMode = Mode.PARALLEL, onEvent=MessageEvent) def func(self, event): # Do something pass
GREENLET:
Runs the method in a greenlet using gevent library:: @subscribe(threadMode = Mode.GREENLET, onEvent=MessageEvent) def func(self, event): # Do something pass
BACKGROUND:
Adds the subscribing methods to a queue which is executed by workers:: @subscribe(threadMode = Mode.BACKGROUND, onEvent=MessageEvent) def func(self, event): # Do something pass
CONCURRENT:
Runs the method in a seperate python process:: @subscribe(threadMode = Mode.CONCURRENT, onEvent=MessageEvent) def func(self, event): # Do something pass
Adding pyeventbus to your project:
pip install pyeventbus
Example:
git clone https://github.com/n89nanda/pyeventbus.git cd pyeventbus virtualenv venv source venv/bin/activate pip install pyeventbus python example.py
Benchmarks and Performance:
Refer /pyeventbus/tests/benchmarks.txt for performance benchmarks on CPU, I/O and networks heavy tasks. Run /pyeventbus/tests/test.sh to generate the same benchmarks.
Inspiration
Inspired by Eventbus from greenrobot: https://github.com/greenrobot/EventBus
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pyeventbus-0.5.tar.gz
.
File metadata
- Download URL: pyeventbus-0.5.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 302262771599f8c6eb04d30bb07631ddad5257ec9adaeebc79e64f603e299465 |
|
MD5 | 12964bef9b90598178e9497bcc97bc2e |
|
BLAKE2b-256 | 1036533f0338be7155364b334b8f613087f7995d0df6469486c779fa729b1ce5 |