Skip to content

docs: say how an integration guarantees release after a cancelled child close - #728

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

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

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Follow-up to closing #723 as not planned. The "Writing an integration" lifecycle rules now point at the documented "Cancelled close" behavior and say what an integration does when it must release every finalizer anyway: catch the cancellation, close the child again with cancellation shielded, and re-raise.

@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: ed9292b Previous: 60ec39c Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 3329686.771362816 iter/sec (stddev: 1.0163376259967693e-8) 3358503.4132609633 iter/sec (stddev: 1.1448438679961073e-8) 1.01
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 3271321.5085610226 iter/sec (stddev: 1.3671880439731652e-8) 3301106.610167273 iter/sec (stddev: 1.1336960239553806e-8) 1.01
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 15883.351434284905 iter/sec (stddev: 0.00005259468171636178) 16034.085394974722 iter/sec (stddev: 0.00005458547255657771) 1.01
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 12603.13856572081 iter/sec (stddev: 0.0001230989860704421) 12624.798511366014 iter/sec (stddev: 0.0001515374756980139) 1.00
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 479.513147605982 iter/sec (stddev: 0.00003528600475009409) 455.2021472552926 iter/sec (stddev: 0.00005041620491597485) 0.95
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 474.7583310361577 iter/sec (stddev: 0.000044199840880603166) 459.71509004060306 iter/sec (stddev: 0.00017710123986099986) 0.97
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 437.58692393817154 iter/sec (stddev: 0.00007173519725340104) 402.8498207122095 iter/sec (stddev: 0.0002823440724655318) 0.92
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 13645.565089059306 iter/sec (stddev: 0.000009497158115577982) 12686.756992164215 iter/sec (stddev: 0.00001967914744629927) 0.93
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 6448.244562205542 iter/sec (stddev: 0.000013972870209813354) 6475.64835134297 iter/sec (stddev: 0.000025601649023647035) 1.00
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 3350.276706340477 iter/sec (stddev: 0.00004202609767696541) 3355.0437281022187 iter/sec (stddev: 0.00004439303325953144) 1.00
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 10069.06201817803 iter/sec (stddev: 0.00001013703484951042) 10183.643337591653 iter/sec (stddev: 0.000009008327904668939) 1.01
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 4095.0295282258808 iter/sec (stddev: 0.000032879075993007515) 4235.554728842193 iter/sec (stddev: 0.000020356958741518294) 1.03
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 2030.5197954686346 iter/sec (stddev: 0.00004295239139286838) 2028.237082863968 iter/sec (stddev: 0.00003794167812795437) 1.00
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[1] 41076.983743659766 iter/sec (stddev: 0.000004373722497062743) 39564.17424519731 iter/sec (stddev: 0.000005174374114934073) 0.96
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[2] 15553.599258323806 iter/sec (stddev: 0.000012343085740759584) 15364.000048192043 iter/sec (stddev: 0.000013417025572041979) 0.99
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[4] 5882.402537913368 iter/sec (stddev: 0.00003146160659411793) 6010.488603150746 iter/sec (stddev: 0.00002846696618051672) 1.02
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 1605109.126556858 iter/sec (stddev: 3.3676029382964675e-8) 1591537.7302301684 iter/sec (stddev: 2.6681367985706763e-8) 0.99
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 1704391.7445540316 iter/sec (stddev: 1.8089075218954514e-8) 1704565.4057079838 iter/sec (stddev: 2.40977719244378e-8) 1.00
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 3247.92814923127 iter/sec (stddev: 0.00001024384557051492) 3300.5437722979327 iter/sec (stddev: 0.000010455322969632931) 1.02
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 57225.018506820576 iter/sec (stddev: 0.000001971060641454416) 58424.80148923944 iter/sec (stddev: 0.0000018127274924436301) 1.02
benchmarks/test_guard_lifecycle.py::test_g7b_request_cycle_sync 421957.57511897583 iter/sec (stddev: 1.0635943497341685e-7) 431822.03681158135 iter/sec (stddev: 1.1586337885933588e-7) 1.02
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 63635.75372571954 iter/sec (stddev: 0.0000016768233535717495) 64428.26251924399 iter/sec (stddev: 0.0000015487221962073072) 1.01
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 604.6034300261133 iter/sec (stddev: 0.0008223483368852818) 591.8171591272641 iter/sec (stddev: 0.0009615215467000859) 0.98
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 2171261.744085378 iter/sec (stddev: 2.822235832966229e-8) 2160753.4676934173 iter/sec (stddev: 2.816643291687293e-8) 1.00
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 3542208.0119874896 iter/sec (stddev: 1.7682851138607183e-8) 3597463.284739677 iter/sec (stddev: 1.1265360803279236e-8) 1.02
benchmarks/test_guard_resolve.py::test_g3_deep_chain 773776.7672606192 iter/sec (stddev: 3.906215025998377e-8) 778404.2028848502 iter/sec (stddev: 4.728927452304181e-8) 1.01
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 473485.52104901156 iter/sec (stddev: 3.808731557397641e-7) 474849.64776240895 iter/sec (stddev: 3.990446335200551e-7) 1.00
benchmarks/test_guard_resolve.py::test_g5_cross_scope 1915217.4415868644 iter/sec (stddev: 2.4422832723920374e-8) 1960314.79910946 iter/sec (stddev: 3.6160293523698136e-8) 1.02
benchmarks/test_guard_resolve.py::test_g9_context_resolve 1363590.0790486874 iter/sec (stddev: 1.4079989953393253e-7) 1399285.4828539586 iter/sec (stddev: 1.4035655215356732e-7) 1.03
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 824720.4682147484 iter/sec (stddev: 3.701881110837212e-8) 823992.6216404204 iter/sec (stddev: 8.440860522489723e-8) 1.00
benchmarks/test_guard_resolve.py::test_g18_alias_hop 3472987.485364302 iter/sec (stddev: 1.467555078604862e-8) 3616094.4408134823 iter/sec (stddev: 1.2506952886222335e-8) 1.04
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 35914.791152341364 iter/sec (stddev: 0.00001873645694375592) 35942.47808939437 iter/sec (stddev: 0.00001815581053924702) 1.00
benchmarks/test_guard_validate.py::test_g11_validate_wide 21335.31249175921 iter/sec (stddev: 0.00002304494405560888) 19788.077995655785 iter/sec (stddev: 0.00020106440195523338) 0.93

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

@lesnik512
lesnik512 merged commit 62a9c1f into main Oct 18, 2026
12 checks passed
@lesnik512
lesnik512 deleted the docs/cancelled-child-close branch October 18, 2026 10:50
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