Created
February 20, 2026 09:17
-
-
Save Tishka17/edc5bec7ebef83e1e364402ff4994983 to your computer and use it in GitHub Desktop.
benchmark with big graph
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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}") |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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