When exiting a nursery block, the parent task always waits for child tasks to exit. This wait cannot be cancelled. However, previously, if you tried to cancel it, it would inject a Cancelled exception, even though it wasn't cancelled. Most users probably never noticed either way, but injecting a Cancelled here is not really useful, and in some rare cases caused confusion or problems, so Trio no longer does that. (python-trio/trio#1457)
If called from a thread spawned by trio.to_thread.run_sync, trio.from_thread.run and trio.from_thread.run_sync now reuse the task and cancellation status of the host task; this means that context variables and cancel scopes naturally propagate 'through' threads spawned by Trio. You can also use trio.from_thread.check_cancelled to efficiently check for cancellation without reentering the Trio thread. (python-trio/trio#2392)
trio.lowlevel.start_guest_run now does a bit more setup of the guest run before it returns to its caller, so that the caller can immediately make calls to trio.current_time, trio.lowlevel.spawn_system_task, trio.lowlevel.current_trio_token, etc. (python-trio/trio#2696)
Bugfixes
When a starting function raises before calling trio.TaskStatus.started, trio.Nursery.start will no longer wrap the exception in an undocumented ExceptionGroup. Previously, trio.Nursery.start would incorrectly raise an ExceptionGroup containing it when using trio.run(..., strict_exception_groups=True). (python-trio/trio#2611)
Deprecations and removals
To better reflect the underlying thread handling semantics, the keyword argument for trio.to_thread.run_sync that was previously called cancellable is now named abandon_on_cancel. It still does the same thing -- allow the thread to be abandoned if the call to trio.to_thread.run_sync is cancelled -- but since we now have other ways to propagate a cancellation without abandoning the thread, "cancellable" has become somewhat of a misnomer. The old cancellable name is now deprecated. (python-trio/trio#2841)
Deprecated support for math.inf for the backlog argument in open_tcp_listeners, making its docstring correct in the fact that only TypeError is raised if invalid arguments are passed. (python-trio/trio#2842)
Removed special MultiError traceback handling for IPython. As of version 8.15ExceptionGroup is handled natively. (python-trio/trio#2702)
Miscellaneous internal changes
Trio now indicates its presence to sniffio using the sniffio.thread_local interface that is preferred since sniffio v1.3.0. This should be less likely than the previous approach to cause sniffio.current_async_library to return incorrect results due to unintended inheritance of contextvars. (python-trio/trio#2700)
On windows, if SIO_BASE_HANDLE failed and SIO_BSP_HANDLE_POLL didn't return a different socket, runtime error will now raise from the OSError that indicated the issue so that in the event it does happen it might help with debugging. (python-trio/trio#2807)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps trio from 0.22.2 to 0.23.1.
Release notes
Sourced from trio's releases.
Commits
fa94d4c
Bump version to 0.23.1d34739e
Remove incorrect assertion for Anaconda interpreters (#2856)626331f
Dependency updates (#2854)e6ae3ed
Merge pull request #2853 from A5rocks/release-0.23.0d017e28
Start new cycleeef24cb
Bump version to 0.23.0c979257
Add removals as a newsfragment type (#2850)e718fc4
Into_thread_run_sync()
, addabandon_on_cancel=
as an alias for the `canc...3b6b167
Merge pull request #2845 from gschaffner/fix-start-nursery-implementation-det...d80928c
Merge pull request #2849 from python-trio/richardsheridan-fix-docstring-mergeDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show