-
-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
featureA new featureA new feature
Description
Description
Allow registering regular functions as handlers.
Motivation
Sometimes asynchronous options are not available for handling a request, to handle these cases it would be useful to be able to register regular functions as handlers instead of co-routines.
@registry.subscribe_to(CreateWidget)
def handler(command: CreateWidget, bus: banshee.SyncBus) -> None:
# synchronous task here
...
bus.handle(WidgetCreated(id=command.id))Possible implementation
Update the Registry class to allow synchronous functions to be subscribed to requests, and wrap them in a thread pool before registering via loop.run_in_executor.
These synchronous handlers would also need a synchronous wrapper around the MessageBus class to then further publish events.
This will need additional work and documentation around the injector integration to minimise problems with sharing resources between threads.
Metadata
Metadata
Assignees
Labels
featureA new featureA new feature