Skip to content

docs: say the starlette and fastapi child close is shielded and bounded - #729

Merged
lesnik512 merged 1 commit into
mainfrom
docs/shielded-child-close
Oct 18, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
docs/shielded-child-close

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Documents modern-di-starlette 4.3.3 (modern-python/modern-di-starlette#67) and modern-di-fastapi 4.2.2 (modern-python/modern-di-fastapi#80). Each page's "Scopes and lifecycle" section now says the child close is shielded from cancellation, so a request cancelled by an anyio scope still runs its finalizers, and that a close running longer than 10 seconds is abandoned with a warning on the integration's logger.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Details
Benchmark suite Current: fd01cc4 Previous: 62a9c1f Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 2926638.394356274 iter/sec (stddev: 3.5698684986235096e-8) 3368376.8027967717 iter/sec (stddev: 2.016835038375244e-8) 1.15
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 3206157.9778610673 iter/sec (stddev: 2.6249258916479893e-8) 3271237.824613772 iter/sec (stddev: 1.1936429091839201e-8) 1.02
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 15046.250453708526 iter/sec (stddev: 0.00005743837143706049) 15491.227683741372 iter/sec (stddev: 0.00005964622598807101) 1.03
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 12565.154716777151 iter/sec (stddev: 0.00012560311376876788) 12323.113513152462 iter/sec (stddev: 0.00018884046798550843) 0.98
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 481.42269620852846 iter/sec (stddev: 0.00003444426475260231) 475.9567803810449 iter/sec (stddev: 0.000046398265144671544) 0.99
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 449.6144635168531 iter/sec (stddev: 0.000052411100684991225) 456.0537608255945 iter/sec (stddev: 0.0002096614511246607) 1.01
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 429.9144797387092 iter/sec (stddev: 0.00015586454030227438) 436.91932732555404 iter/sec (stddev: 0.00009993383056880878) 1.02
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 13020.471653552348 iter/sec (stddev: 0.000007738476597871104) 13064.224817851204 iter/sec (stddev: 0.000010803410730228787) 1.00
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 6697.195086363781 iter/sec (stddev: 0.000027130174359463323) 5992.281940848677 iter/sec (stddev: 0.00001623774235719754) 0.89
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 3169.990921672526 iter/sec (stddev: 0.00021165575224024844) 3143.9193534397587 iter/sec (stddev: 0.00007856464304719835) 0.99
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 10078.399026154475 iter/sec (stddev: 0.000008760369889252729) 9361.573455837937 iter/sec (stddev: 0.000010514915473408809) 0.93
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 4219.1400232378555 iter/sec (stddev: 0.000018011930155011862) 3815.236247689667 iter/sec (stddev: 0.00002929007971713621) 0.90
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 1975.9658335749928 iter/sec (stddev: 0.00007980848083903456) 1889.5321556153644 iter/sec (stddev: 0.000041109108030026855) 0.96
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[1] 40268.28070876824 iter/sec (stddev: 0.0000051534091413483835) 33571.673564032026 iter/sec (stddev: 0.000004813400646461457) 0.83
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[2] 14433.567281427693 iter/sec (stddev: 0.000018579594039247744) 13932.48757707931 iter/sec (stddev: 0.000015090474312096087) 0.97
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[4] 5842.29257012816 iter/sec (stddev: 0.00003256611852351019) 5978.7494319719235 iter/sec (stddev: 0.00003490747179089923) 1.02
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 1547856.1920869565 iter/sec (stddev: 3.423018721586968e-8) 1133606.717702516 iter/sec (stddev: 1.719555230101188e-7) 0.73
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 1706776.191626273 iter/sec (stddev: 1.8172412217096508e-8) 1645544.5933914874 iter/sec (stddev: 2.3665409865310352e-8) 0.96
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 3142.873457332952 iter/sec (stddev: 0.000041420748446382134) 3121.537986603407 iter/sec (stddev: 0.000040552970893337285) 0.99
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 57740.75319547023 iter/sec (stddev: 0.0000018260337403328568) 54136.84169394392 iter/sec (stddev: 0.0000020251935213467162) 0.94
benchmarks/test_guard_lifecycle.py::test_g7b_request_cycle_sync 407714.3884060316 iter/sec (stddev: 3.3912518656027116e-7) 422445.8847882337 iter/sec (stddev: 9.309614806719311e-8) 1.04
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 64641.106153073626 iter/sec (stddev: 0.0000015511899393311858) 64897.48079337249 iter/sec (stddev: 0.000001687781564099515) 1.00
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 567.0863240060489 iter/sec (stddev: 0.001140903589495204) 560.4984528391024 iter/sec (stddev: 0.0015564606092484297) 0.99
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 2169049.6569244433 iter/sec (stddev: 3.395517552868711e-8) 2162146.851810498 iter/sec (stddev: 3.124161737881505e-8) 1.00
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 3635242.131120152 iter/sec (stddev: 1.1203298061415355e-8) 3488926.0614522216 iter/sec (stddev: 2.083445445916843e-8) 0.96
benchmarks/test_guard_resolve.py::test_g3_deep_chain 781809.2379202034 iter/sec (stddev: 3.7627067847728164e-8) 802308.8362289348 iter/sec (stddev: 5.802748791865847e-8) 1.03
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 481206.5735121898 iter/sec (stddev: 3.7275630736660344e-7) 481126.4208750084 iter/sec (stddev: 4.38101295019777e-7) 1.00
benchmarks/test_guard_resolve.py::test_g5_cross_scope 1998644.8188771142 iter/sec (stddev: 2.8856461548339992e-8) 1958277.6223858262 iter/sec (stddev: 2.6512773927117607e-8) 0.98
benchmarks/test_guard_resolve.py::test_g9_context_resolve 1415006.3188858011 iter/sec (stddev: 1.3917320324721138e-7) 1473355.0552514 iter/sec (stddev: 1.7054662097746741e-7) 1.04
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 824932.4957731023 iter/sec (stddev: 3.402401419094997e-8) 827826.7676477522 iter/sec (stddev: 6.51372220084119e-8) 1.00
benchmarks/test_guard_resolve.py::test_g18_alias_hop 3412570.024235736 iter/sec (stddev: 2.9698915243531713e-8) 3571103.4734757957 iter/sec (stddev: 1.156164309515365e-8) 1.05
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 35140.130700518304 iter/sec (stddev: 0.000019373675239786004) 35326.36022395037 iter/sec (stddev: 0.000019837803870371134) 1.01
benchmarks/test_guard_validate.py::test_g11_validate_wide 20704.56760152282 iter/sec (stddev: 0.000025325632200963667) 21117.06203213061 iter/sec (stddev: 0.000025219091318994467) 1.02

This comment was automatically generated by workflow using github-action-benchmark.

@lesnik512
lesnik512 merged commit aec56c1 into main Oct 18, 2026
12 checks passed
@lesnik512
lesnik512 deleted the docs/shielded-child-close branch October 18, 2026 18:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant