Benchmarks
Benchmark tries to resolve this set of dependencies:
Async
Async API is used, Session
dependency ran as a context manager, equivalent to
async with create_session_cm() as session:
repo_a = RepositoryA(session=session)
repo_b = RepositoryB(session=session)
svc_a = ServiceA(repository=repo_a)
svc_b = ServiceB(repository=repo_b)
UseCase(service_a=svc_a, service_b=svc_b)
Name | iterations | total | mean | median |
---|---|---|---|---|
python | 100000 | 194.520ms | 1.945μs | 1.900μs |
dishka | 100000 | 600.378ms | 6.004μs | 4.600μs |
aioinject | 100000 | 611.180ms | 6.112μs | 5.100μs |
adriangb/di | 100000 | 623.968ms | 6.240μs | 6.200μs |
wireup | 100000 | 1394.453ms | 13.945μs | 13.900μs |
Note
This set of benchmarks is smaller, since not all libraries support scopes or context manager dependencies
Sync
All libraries use synchronous API with no context managers, equivalent to
session = Session()
repo_a = RepositoryA(session=session)
repo_b = RepositoryB(session=session)
svc_a = ServiceA(repository=repo_a)
svc_b = ServiceB(repository=repo_b)
UseCase(service_a=svc_a, service_b=svc_b)
Name | iterations | total | mean | median |
---|---|---|---|---|
python | 100000 | 73.443ms | 0.734μs | 0.700μs |
dependency-injector | 100000 | 154.265ms | 1.543μs | 1.500μs |
rodi | 100000 | 208.062ms | 2.081μs | 2.000μs |
aioinject | 100000 | 343.069ms | 3.431μs | 2.700μs |
dishka | 100000 | 359.610ms | 3.596μs | 3.000μs |
adriangb/di | 100000 | 426.652ms | 4.267μs | 4.200μs |
lagom | 100000 | 1101.359ms | 11.014μs | 10.400μs |
wireup | 100000 | 1436.985ms | 14.370μs | 13.500μs |
punq | 5000 | 9771.656ms (extrapolated) | 97.717μs | 91.000μs |