.. py:currentmodule:: anyio
AnyIO requires Python 3.6.2 or later to run. It is recommended that you set up a virtualenv when developing or playing around with AnyIO.
To install AnyIO, run:
pip install anyio
To install a supported version of trio, you can install it as an extra like this:
pip install anyio[trio]
The simplest possible AnyIO program looks like this:
from anyio import run async def main(): print('Hello, world!') run(main)
This will run the program above on the default backend (asyncio). To run it on another supported
backend, say trio, you can use the backend
argument, like so:
run(main, backend='trio')
But AnyIO code is not required to be run via :func:`run`. You can just as well use the native
run()
function of the backend library:
import sniffio import trio from anyio import sleep async def main(): print('Hello') await sleep(1) print("I'm running on", sniffio.current_async_library()) trio.run(main)
Asyncio:
debug
(bool
, default=False): Enables debug mode in the event loopuse_uvloop
(bool
, default=False): Use the faster uvloop event loop implementation, if availablepolicy
(AbstractEventLoopPolicy
, default=None): the event loop policy instance to use for creating a new event loop (overridesuse_uvloop
)
Trio: options covered in the official documentation
Note
The default value of use_uvloop
was True
before v3.2.0.
AnyIO lets you mix and match code written for AnyIO and code written for the asynchronous framework of your choice. There are a few rules to keep in mind however:
- You can only use "native" libraries for the backend you're running, so you cannot, for example, use a library written for trio together with a library written for asyncio.
- Tasks spawned by these "native" libraries on backends other than trio are not subject to the cancellation rules enforced by AnyIO
- Threads spawned outside of AnyIO cannot use :func:`.from_thread.run` to call asynchronous code