Python Basic EventEngine
Project description
PyEventEngine
High-performance, topic-driven event engine for Python with a Cython-accelerated core and a native Python fallback.
- Fast publish/subscribe event routing by topic (exact + generic wildcard/pattern matching)
- Clean, typed API with drop-in fallback when C extensions are unavailable
- Built-in timers, handler stats (EventHookEx), and convenient formatting helpers
Installation
pip install PyEventEngine
Or install from source:
pip install git+https://github.com/BolunHan/PyEventEngine.git
Quick Start
import time
from event_engine import EventEngine, Topic, EventHook
# Create and start the engine
engine = EventEngine(capacity=8192)
engine.start()
# Register a handler for an exact topic
exact = Topic('Demo.Hello')
def hello_handler(name: str, topic=None):
print(f"Hello {name} from {topic.value if topic else 'N/A'}")
engine.register_handler(exact, hello_handler)
# Publish a message
engine.put(exact, 'World')
# Clean up
time.sleep(0.1)
engine.stop()
engine.clear()
Generic topics (wildcards/patterns)
import time
from event_engine import Topic, EventEngine
engine = EventEngine()
pattern = Topic('Demo.{what}')
calls = []
def f(what: str, topic=None):
calls.append((what, topic.value))
engine.register_handler(pattern, f)
engine.start()
engine.put(Topic('Demo.Test'), 'a test sub-topic')
engine.put(Topic('Demo.Live'), 'a live sub-topic')
time.sleep(0.1) # allow some time for processing
engine.stop()
print(calls) # [('a test sub-topic', 'Demo.Test'), ('a live sub-topic', 'Demo.Live')]
Timers (EventEngineEx)
from event_engine import EventEngine, EventEngineBase, EventEngine as EventEngineEx, Topic
engine = EventEngineEx(capacity=4096)
engine.start()
# Create a 1-second timer topic and subscribe
timer_topic = engine.get_timer(1.0)
engine.register_handler(timer_topic, lambda **kw: print('tick', kw))
# ... run a little while
import time; time.sleep(3)
engine.stop(); engine.clear()
Logging
By default, the package uses a colored logger under event_engine.base. To integrate with your
application's logging, call set_logger once after import. It will propagate to submodules.
import logging
from event_engine import set_logger
logger = logging.getLogger('MyApp')
logger.setLevel(logging.INFO)
set_logger(logger)
Fallback behavior
On import, the package tries to use the Cython implementation (event_engine.capi). If that fails
(e.g., no compiler available), it automatically falls back to the native Python implementation (event_engine.native).
You can check the active backend via:
from event_engine import USING_FALLBACK
print('Using native fallback?' , USING_FALLBACK)
Development
- Run unit tests and demos under
demo/ - Native performance test:
python demo/native_performance_test.py - CAPI performance test (requires compiled extensions):
python demo/capi_performance_test.py
Documentation
Full documentation is available at: https://bolunhan.github.io/PyEventEngine/ (auto-generated from main branch)
To build documentation locally, see docs/BUILD.md.
See demo/ for more examples: matching, timers, performance. Issues and PRs welcome!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyeventengine-0.4.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pyeventengine-0.4.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.6 MB
- Tags: CPython 3.14t, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02590f7096c025b2cbcff703a6c7a5a59f51ae74b1ddae2dca6cad44bb32d01d
|
|
| MD5 |
a675c35d192f9c13a89c727163b5ec72
|
|
| BLAKE2b-256 |
872d6bd4568d6bf1eaf4449729d41cac78d415c715b73c7c2afd237e2d84208f
|
File details
Details for the file pyeventengine-0.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pyeventengine-0.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.6 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7435ea6ffc656fa7e17a8a86f773e63d6946b469eff1e9018cb661c431b8d1a
|
|
| MD5 |
69240d119f174fd6ede36ae21dcec26d
|
|
| BLAKE2b-256 |
b02f8ce8bbccf50a3d8e859516289b48ef614b22b7b31baa69506592f1ad2c11
|
File details
Details for the file pyeventengine-0.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pyeventengine-0.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8aa577f804ba7c65fa10338726e321316ee2cee451254f8d4558e5d482cfd96c
|
|
| MD5 |
fd3d43e76db0d15999141539bcd88bd9
|
|
| BLAKE2b-256 |
7e19f39f7fa0df0a0f318eb49b85d5783b854d05c730eb6796f9cd6a42915963
|
File details
Details for the file pyeventengine-0.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pyeventengine-0.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7222621b063700ca5339487bff81a2d833a8f79d51f36cc50df287f191828207
|
|
| MD5 |
46416f56de0b4382970089184f5d382e
|
|
| BLAKE2b-256 |
3fe4cb161a905bc9cb14f00e24dc0b497ae10983abd6f314e45a53d19af9c76f
|