Skip to content

Instantly share code, notes, and snippets.

@Tishka17
Created February 20, 2026 09:17
Show Gist options
  • Select an option

  • Save Tishka17/edc5bec7ebef83e1e364402ff4994983 to your computer and use it in GitHub Desktop.

Select an option

Save Tishka17/edc5bec7ebef83e1e364402ff4994983 to your computer and use it in GitHub Desktop.
benchmark with big graph
import time
from textwrap import dedent
from dishka import BaseScope, Provider, make_container, provide, Scope
from dishka.plotter import render_d2, render_mermaid
# class MyScope(BaseScope):
# APP = "app"
# REQUEST = "request"
MyScope = Scope
def generate_provider(width: int, height: int):
class MyProvider(Provider):
pass
prev_classes = []
for i in range(width):
exec(dedent(f"""\
class Top_{i}:
def __init__(self):
pass
"""), globals())
cls = globals()[f"Top_{i}"]
setattr(MyProvider, f"top_{i}", provide(cls, scope=MyScope.APP))
prev_classes.append(cls)
for i in range(height):
new_prev = []
for j in range(width):
deps = ", ".join(
f"d_{n}: {dep.__name__}" for n, dep in enumerate(prev_classes))
s = dedent(f"""\
class Middle_{i}_{j}:
def __init__(self, {deps}):
pass
""")
# print(s)
exec(s, globals())
cls = globals()[f"Middle_{i}_{j}"]
setattr(MyProvider, f"middle_{i}_{j}",
provide(cls, scope=MyScope.REQUEST))
new_prev.append(cls)
prev_classes = new_prev
deps = ",".join(
f"d_{n}: {dep.__name__}" for n, dep in enumerate(prev_classes))
exec(dedent(f"""\
class Bottom:
def __init__(self, {deps}):
pass
"""), globals())
cls = globals()[f"Bottom"]
setattr(MyProvider, f"bottom", provide(cls, scope=MyScope.REQUEST))
return MyProvider
number = 10000
now = time.time()
prov = generate_provider(6, 7)
# for k, v in globals().copy().items():
# print(k, "=", v)
container = make_container(prov(), scopes=MyScope, lock_factory=None)
print("make", container, f"{time.time() - now: .2f}")
# s = render_mermaid(container)
# with open("geenrate.html", "w") as f:
# f.write(s)
bottom = globals()["Bottom"]
with container() as state:
x = state.get(bottom)
print("solved", x, f"{time.time() - now: .2f}")
for i in range(number):
with container() as state:
x = state.get(bottom)
print("done", x, f"{time.time() - now: .2f}")
import time
from textwrap import dedent
from diwire import Container, Lifetime, Scope
# class MyScope(BaseScope):
# APP = "app"
# REQUEST = "request"
MyScope = Scope
def generate_provider(width: int, height: int):
container = Container()
prev_classes = []
for i in range(width):
exec(dedent(f"""\
class Top_{i}:
def __init__(self):
pass
"""), globals())
cls = globals()[f"Top_{i}"]
container.add(cls, scope=Scope.APP)
prev_classes.append(cls)
for i in range(height):
new_prev = []
for j in range(width):
deps = ", ".join(
f"d_{n}: {dep.__name__}" for n, dep in enumerate(prev_classes))
s = dedent(f"""\
class Middle_{i}_{j}:
def __init__(self, {deps}):
pass
""")
# print(s)
exec(s, globals())
cls = globals()[f"Middle_{i}_{j}"]
container.add(cls, scope=Scope.REQUEST)
new_prev.append(cls)
prev_classes = new_prev
deps = ",".join(
f"d_{n}: {dep.__name__}" for n, dep in enumerate(prev_classes))
exec(dedent(f"""\
class Bottom:
def __init__(self, {deps}):
pass
"""), globals())
cls = globals()[f"Bottom"]
container.add(cls, scope=Scope.REQUEST)
return container
number = 10000
now = time.time()
container = generate_provider(7, 7)
print("make", container, f"{time.time() - now: .2f}")
# s = render_mermaid(container)
# with open("geenrate.html", "w") as f:
# f.write(s)
bottom = globals()["Bottom"]
with container.enter_scope() as request_scope:
x = request_scope.resolve(bottom)
print("solved", x, f"{time.time() - now: .2f}")
for i in range(number):
with container.enter_scope() as request_scope:
x = request_scope.resolve(bottom)
print("done", x, f"{time.time() - now: .2f}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment