- Update to 4.12.0:
* Added support for asyncio's task call graphs on Python 3.14 and later
when using AnyIO's task groups
* Added an asynchronous implementation of the functools module
* Added support for uvloop=True on Windows via the winloop implementation
* Added support for use as a context manager to anyio.lowlevel.RunVar
* Added __all__ declarations to public submodules (anyio.lowlevel etc.)
* Added the ability to set the token count of a CapacityLimiter to zero
* Added parameters case_sensitive and recurse_symlinks along with support
for path-like objects to anyio.Path.glob() and anyio.Path.rglob()
* Dropped sniffio as a direct dependency and added the
get_available_backends() function
* Fixed Process.stdin.send() not raising ClosedResourceError and
BrokenResourceError on asyncio
* Fixed Process.stdin.send() not checkpointing before writing data on
asyncio
* Fixed a race condition where cancelling a Future from
BlockingPortal.start_task_soon() would sometimes not cancel the async
function
* Fixed the presence of the pytest plugin causing breakage with older
versions of pytest (<= 6.1.2)
* Fixed a rarely occurring RuntimeError: Set changed size during iteration
while shutting down the process pool when using the asyncio backend
OBS-URL: https://build.opensuse.org/request/show/1321496
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-anyio?expand=0&rev=30
* Added support for asyncio's task call graphs on Python 3.14 and later
when using AnyIO's task groups
* Added an asynchronous implementation of the functools module
* Added support for uvloop=True on Windows via the winloop implementation
* Added support for use as a context manager to anyio.lowlevel.RunVar
* Added __all__ declarations to public submodules (anyio.lowlevel etc.)
* Added the ability to set the token count of a CapacityLimiter to zero
* Added parameters case_sensitive and recurse_symlinks along with support
for path-like objects to anyio.Path.glob() and anyio.Path.rglob()
* Dropped sniffio as a direct dependency and added the
get_available_backends() function
* Fixed Process.stdin.send() not raising ClosedResourceError and
BrokenResourceError on asyncio
* Fixed Process.stdin.send() not checkpointing before writing data on
asyncio
* Fixed a race condition where cancelling a Future from
BlockingPortal.start_task_soon() would sometimes not cancel the async
function
* Fixed the presence of the pytest plugin causing breakage with older
versions of pytest (<= 6.1.2)
* Fixed a rarely occurring RuntimeError: Set changed size during iteration
while shutting down the process pool when using the asyncio backend
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-anyio?expand=0&rev=63
- Update to 4.11.0
* Added support for cancellation reasons (the reason parameter to
CancelScope.cancel()) (#975)
* Bumped the minimum version of Trio to v0.31.0
* Added the ability to enter the event loop from foreign (non-worker) threads
by passing the return value of anyio.lowlevel.current_token() to
anyio.from_thread.run() and anyio.from_thread.run_sync() as the token
keyword argument (#256)
* Added pytest option (anyio_mode = "auto") to make the pytest plugin
automatically handle all async tests (#971)
* Added the anyio.Condition.wait_for() method for feature parity with
asyncio (#974)
* Changed the default type argument of anyio.abc.TaskStatus from Any to
None (#964)
* Fixed TCP listener behavior to guarantee the same ephemeral port is used for
all socket listeners when local_port=0 (#857; PR by @11kkw and @agronholm)
* Fixed inconsistency between Trio and asyncio where a TCP stream that
previously raised a BrokenResourceError on send() would still raise
BrokenResourceError after the stream was closed on asyncio, but
ClosedResourceError on Trio. They now both raise a ClosedResourceError in
this scenario. (#671)
OBS-URL: https://build.opensuse.org/request/show/1306875
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-anyio?expand=0&rev=59
Should fix the build in Staging:C
- Skip flaky test_keyboardinterrupt_during_test, the timeout increase
doesn't always help.
- Fix build for Leap
- Update to 4.10.0:
+ Added the feed_data() method to the BufferedByteReceiveStream
class, allowing users to inject data directly into the buffer
+ Added various class methods to wrap existing sockets as
listeners or socket streams
+ Added a hierarchy of connectable stream classes for
transparently connecting to various remote or local endpoints
for exchanging bytes or objects
+ Added context manager mix-in classes (anyio.ContextManagerMixin
and anyio.AsyncContextManagerMixin) to help write classes that
embed other context managers, particularly cancel scopes or
task groups
+ Added the ability to specify the thread name in start_blocking
_portal()
+ Added anyio.notify_closing to allow waking anyio.wait_readable
and anyio.wait_writable before closing a socket. Among other
things, this prevents an OSError on the ProactorEventLoop.
+ Incorporated several documentation improvements from the
EuroPython 2025 sprint
+ Added a documentation page explaining why one might want to use
AnyIO's APIs instead of asyncio's
+ Updated the to_interpreters module to use the public
concurrent.interpreters API on Python 3.14 or later
+ Fixed anyio.Path.copy() and anyio.Path.copy_into() failing on
Python 3.14.0a7
+ Fixed return annotation of __aexit__ on async context managers.
OBS-URL: https://build.opensuse.org/request/show/1299192
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-anyio?expand=0&rev=27
- Update to 4.10.0:
+ Added the feed_data() method to the BufferedByteReceiveStream
class, allowing users to inject data directly into the buffer
+ Added various class methods to wrap existing sockets as
listeners or socket streams
+ Added a hierarchy of connectable stream classes for
transparently connecting to various remote or local endpoints
for exchanging bytes or objects
+ Added context manager mix-in classes (anyio.ContextManagerMixin
and anyio.AsyncContextManagerMixin) to help write classes that
embed other context managers, particularly cancel scopes or
task groups
+ Added the ability to specify the thread name in start_blocking
_portal()
+ Added anyio.notify_closing to allow waking anyio.wait_readable
and anyio.wait_writable before closing a socket. Among other
things, this prevents an OSError on the ProactorEventLoop.
+ Incorporated several documentation improvements from the
EuroPython 2025 sprint
+ Added a documentation page explaining why one might want to use
AnyIO's APIs instead of asyncio's
+ Updated the to_interpreters module to use the public
concurrent.interpreters API on Python 3.14 or later
+ Fixed anyio.Path.copy() and anyio.Path.copy_into() failing on
Python 3.14.0a7
+ Fixed return annotation of __aexit__ on async context managers.
+ Fixed rollover boundary check in SpooledTemporaryFile so that
rollover only occurs when the buffer size exceeds max_size
+ Migrated testing and documentation dependencies from extras to
dependency groups
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-anyio?expand=0&rev=56
- Inject multibuild to break a build loop.
- Update to 4.9.0:
* Added async support for temporary file handling (#344; PR by @11kkw)
* Added 4 new fixtures for the AnyIO pytest plugin:
* free_tcp_port_factory: session scoped fixture returning a callable
that generates unused TCP port numbers
* free_udp_port_factory: session scoped fixture returning a callable
that generates unused UDP port numbers
* free_tcp_port: function scoped fixture that invokes the
free_tcp_port_factory fixture to generate a free TCP port number
* free_udp_port: function scoped fixture that invokes the
free_udp_port_factory fixture to generate a free UDP port number
* Added stdin argument to anyio.run_process() akin to what
anyio.open_process(), asyncio.create_subprocess(), trio.run_process(),
and subprocess.run() already accept (PR by @jmehnle)
* Added the info property to anyio.Path on Python 3.14
* Changed anyio.getaddrinfo() to ignore (invalid) IPv6 name resolution
results when IPv6 support is disabled in Python
* Changed EndOfStream raised from MemoryObjectReceiveStream.receive()
to leave out the AttributeError from the exception chain which was
merely an implementation detail and caused some confusion
* Fixed traceback formatting growing quadratically with level of
TaskGroup nesting on asyncio due to exception chaining when raising
ExceptionGroups in TaskGroup.__aexit__ (#863; PR by @tapetersen)
* Fixed anyio.Path.iterdir() making a blocking call in Python 3.13
(#873; PR by @cbornet and @agronholm)
* Fixed connect_tcp() producing cyclic references in tracebacks when
raising exceptions (#809; PR by @graingert)
* Fixed anyio.to_thread.run_sync() needlessly holding on to references
OBS-URL: https://build.opensuse.org/request/show/1294656
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-anyio?expand=0&rev=25
* Added async support for temporary file handling (#344; PR by @11kkw)
* Added 4 new fixtures for the AnyIO pytest plugin:
* free_tcp_port_factory: session scoped fixture returning a callable
that generates unused TCP port numbers
* free_udp_port_factory: session scoped fixture returning a callable
that generates unused UDP port numbers
* free_tcp_port: function scoped fixture that invokes the
free_tcp_port_factory fixture to generate a free TCP port number
* free_udp_port: function scoped fixture that invokes the
free_udp_port_factory fixture to generate a free UDP port number
* Added stdin argument to anyio.run_process() akin to what
anyio.open_process(), asyncio.create_subprocess(), trio.run_process(),
and subprocess.run() already accept (PR by @jmehnle)
* Added the info property to anyio.Path on Python 3.14
* Changed anyio.getaddrinfo() to ignore (invalid) IPv6 name resolution
results when IPv6 support is disabled in Python
* Changed EndOfStream raised from MemoryObjectReceiveStream.receive()
to leave out the AttributeError from the exception chain which was
merely an implementation detail and caused some confusion
* Fixed traceback formatting growing quadratically with level of
TaskGroup nesting on asyncio due to exception chaining when raising
ExceptionGroups in TaskGroup.__aexit__ (#863; PR by @tapetersen)
* Fixed anyio.Path.iterdir() making a blocking call in Python 3.13
(#873; PR by @cbornet and @agronholm)
* Fixed connect_tcp() producing cyclic references in tracebacks when
raising exceptions (#809; PR by @graingert)
* Fixed anyio.to_thread.run_sync() needlessly holding on to references
of the context, function, arguments and others until the next work
item on asyncio (PR by @Wankupi)
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-anyio?expand=0&rev=51
- Update to 4.8.0:
* Added experimental support for running functions in
subinterpreters on Python 3.13 and later
* Added support for the copy(), copy_into(), move() and move_into()
methods in anyio.Path, available in Python 3.14
* Changed TaskGroup on asyncio to always spawn tasks non-eagerly,
even if using a task factory created
via asyncio.create_eager_task_factory(), to preserve expected
Trio-like task scheduling semantics (PR by @agronholm and @graingert)
* Configure SO_RCVBUF, SO_SNDBUF and TCP_NODELAY on the selector
thread waker socket pair (this should improve the performance of
wait_readable() and wait_writable() when using the ProactorEventLoop)
(#836; PR by @graingert)
* Fixed AssertionError when using nest-asyncio (#840)
* Fixed return type annotation of various context managers'
__exit__ method (#847; PR by @Enegg)
- from 4.7.0:
* Updated TaskGroup to work with asyncio's eager task factories (#764)
* Added the wait_readable() and wait_writable() functions which will
accept an object with a .fileno() method or an integer handle, and
deprecated their now obsolete versions (wait_socket_readable() and
wait_socket_writable()) (PR by @davidbrochart)
* Changed EventAdapter (an Event with no bound async backend) to allow
set() to work even before an async backend is bound to it (#819)
* Added support for wait_readable() and wait_writable() on
ProactorEventLoop (used on asyncio + Windows by default)
* Fixed a misleading ValueError in the context of DNS failures
(#815; PR by @graingert)
* Fixed the return type annotations of readinto() and readinto1()
methods in the anyio.AsyncFile class (#825)
* Fixed TaskInfo.has_pending_cancellation() on asyncio returning
false positives in cleanup code on Python >= 3.11
(#832; PR by @gschaffner)
* Fixed cancelled cancel scopes on asyncio calling
asyncio.Task.uncancel when propagating a CancelledError on exit
to a cancelled parent scope (#790; PR by @gschaffner)
OBS-URL: https://build.opensuse.org/request/show/1244802
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-anyio?expand=0&rev=24
* Added experimental support for running functions in
subinterpreters on Python 3.13 and later
* Added support for the copy(), copy_into(), move() and move_into()
methods in anyio.Path, available in Python 3.14
* Changed TaskGroup on asyncio to always spawn tasks non-eagerly,
even if using a task factory created
via asyncio.create_eager_task_factory(), to preserve expected
Trio-like task scheduling semantics (PR by @agronholm and @graingert)
* Configure SO_RCVBUF, SO_SNDBUF and TCP_NODELAY on the selector
thread waker socket pair (this should improve the performance of
wait_readable() and wait_writable() when using the ProactorEventLoop)
(#836; PR by @graingert)
* Fixed AssertionError when using nest-asyncio (#840)
* Fixed return type annotation of various context managers'
__exit__ method (#847; PR by @Enegg)
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-anyio?expand=0&rev=48
* Dropped support for Python 3.8 (as #698 cannot be resolved
without cancel message support)
* Fixed 100% CPU use on asyncio while waiting for an exiting task
group to finish while said task group is within a cancelled
cancel scope (#695)
* Fixed cancel scopes on asyncio not propagating CancelledError
on exit when the enclosing cancel scope has been effectively
cancelled (#698)
* Fixed asyncio task groups not yielding control to the event
loop at exit if there were no child tasks to wait on
* Fixed inconsistent task uncancellation with asyncio cancel
scopes belonging to a task group when said task group has child
tasks running
- update to 4.5.0:
* Improved the performance of anyio.Lock and anyio.Semaphore on
asyncio (even up to 50 %)
* Added the fast_acquire parameter to anyio.Lock and
anyio.Semaphore to further boost performance at the expense of
safety (acquire() will not yield control back if there is no
contention)
* Added support for the from_uri(), full_match(), parser
methods/properties in anyio.Path, newly added in Python 3.13
(#737)
* Added support for more keyword arguments for run_process() and
open_process(): startupinfo, creationflags, pass_fds, user,
group, extra_groups and umask (#742)
* Improved the type annotations and support for PathLike in
run_process() and open_process() to allow for path-like
arguments, just like subprocess.Popen
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-anyio?expand=0&rev=44
- update to 4.4.0:
* Added the BlockingPortalProvider class to aid with
constructing synchronous counterparts to asynchronous
interfaces that would otherwise require multiple blocking
portals
* Added __slots__ to AsyncResource so that child classes can
use __slots__
* Added the TaskInfo.has_pending_cancellation() method
* Fixed erroneous RuntimeError: called 'started' twice on the
same task status when cancelling a task in a TaskGroup
created with the start() method before the first checkpoint
is reached after calling task_status.started()
* Fixed two bugs with TaskGroup.start() on asyncio: Fixed
erroneous RuntimeError: called 'started' twice on the same
task status when cancelling a task in a TaskGroup created
with the start() method before the first checkpoint is
reached after calling task_status.started() (#706; PR by
Dominik Schwabe) Fixed the entire task group being cancelled
if a TaskGroup.start() call gets cancelled (#685, #710)
* Fixed erroneous RuntimeError: called 'started' twice on the
same task status when cancelling a task in a TaskGroup
created with the start() method before the first checkpoint
is reached after calling task_status.started()
* Fixed the entire task group being cancelled if a
TaskGroup.start() call gets cancelled
* Fixed a race condition that caused crashes when multiple
event loops of the same backend were running in separate
threads and simultaneously attempted to use AnyIO for their
first time
* Fixed cancellation delivery on asyncio incrementing the wrong
OBS-URL: https://build.opensuse.org/request/show/1193842
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-anyio?expand=0&rev=21
* Added the BlockingPortalProvider class to aid with
constructing synchronous counterparts to asynchronous
interfaces that would otherwise require multiple blocking
portals
* Added __slots__ to AsyncResource so that child classes can
use __slots__
* Added the TaskInfo.has_pending_cancellation() method
* Fixed erroneous RuntimeError: called 'started' twice on the
same task status when cancelling a task in a TaskGroup
created with the start() method before the first checkpoint
is reached after calling task_status.started()
* Fixed two bugs with TaskGroup.start() on asyncio: Fixed
erroneous RuntimeError: called 'started' twice on the same
task status when cancelling a task in a TaskGroup created
with the start() method before the first checkpoint is
reached after calling task_status.started() (#706; PR by
Dominik Schwabe) Fixed the entire task group being cancelled
if a TaskGroup.start() call gets cancelled (#685, #710)
* Fixed erroneous RuntimeError: called 'started' twice on the
same task status when cancelling a task in a TaskGroup
created with the start() method before the first checkpoint
is reached after calling task_status.started()
* Fixed the entire task group being cancelled if a
TaskGroup.start() call gets cancelled
* Fixed a race condition that caused crashes when multiple
event loops of the same backend were running in separate
threads and simultaneously attempted to use AnyIO for their
first time
* Fixed cancellation delivery on asyncio incrementing the wrong
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-anyio?expand=0&rev=42
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.