An open API service indexing awesome lists of open source software.

https://github.com/fastapi/asyncer

Asyncer, async and await, focused on developer experience.
https://github.com/fastapi/asyncer

anyio async asyncio python trio

Last synced: 9 days ago
JSON representation

Asyncer, async and await, focused on developer experience.

Awesome Lists containing this project

README

          


Asyncer



Asyncer, async and await, focused on developer experience.




Test


Publish


Coverage

Package version

---

**Documentation**: https://asyncer.tiangolo.com

**Source Code**: https://github.com/fastapi/asyncer

---

**Asyncer** is a small library built on top of AnyIO.

**Asyncer** has a small number of utility functions that allow working with `async`, `await`, and concurrent code in a more convenient way under my (@tiangolo - Sebastián Ramírez) very opinionated and subjective point of view.

The main goal of **Asyncer** is to improve **developer experience** by providing better support for **autocompletion** and **inline errors** in the editor, and **more certainty** that the code is **bug-free** by providing better support for type checking tools like **mypy**.

**Asyncer** also tries to improve **convenience** and simplicity when working with **async** code **mixed** with regular **blocking code**, allowing to use them together in a simpler way... again, under my very **subjective** point of view.

## Can I Use It?

Yes 🎉 (but continue reading).

This is a very small library, there are things that can change and improve in the future.

If you use it, **pin the exact Asyncer version** for your project, to make sure it all works.

Have **tests** for your project (as you should, anyway). And **upgrade the version** once you know that the new version continues to work correctly.

Still, it's **just 4 functions**, so there's not much to change, if you had to refactor your code to update something it would not be much.

And if you don't want to add `asyncer` as a dependency to your project, you can also just copy the main file and try out those functions, it's quite small (but in that case you won't get updates easily).

## Requirements

As **Asyncer** is based on **AnyIO** it will be also installed automatically when you install **Asyncer**.

## Installation

```console
$ pip install asyncer
---> 100%
Successfully installed asyncer anyio
```

## How to Use

You can read more about each of the use cases and utility functions in **Asyncer** in the tutorial.

As a sneak preview of one of the utilities, you can **call sync code from async code** using `asyncify()`:

```Python
import time

import anyio
from asyncer import asyncify

def do_sync_work(name: str):
time.sleep(1)
return f"Hello, {name}"

async def main():
message = await asyncify(do_sync_work)(name="World")
print(message)

anyio.run(main)
```

**Asyncer**'s `asyncify()` will use AnyIO underneath to do *the smart thing*, avoid blocking the main **async** event loop, and run the **sync**/blocking function in a **worker thread**.

### Editor Support

Everything in **Asyncer** is designed to get the best **developer experience** possible, with the best editor support.

* **Autocompletion** for function arguments:

* **Autocompletion** for return values:

* **Inline errors** in editor:

* Support for tools like **mypy**, that can help you verify that your **code is correct**, and prevent many bugs.

## License

This project is licensed under the terms of the [MIT license](https://github.com/fastapi/asyncer/blob/main/LICENSE).