Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tiangolo/asyncer
Asyncer, async and await, focused on developer experience.
https://github.com/tiangolo/asyncer
anyio async asyncio python trio
Last synced: about 1 month ago
JSON representation
Asyncer, async and await, focused on developer experience.
- Host: GitHub
- URL: https://github.com/tiangolo/asyncer
- Owner: fastapi
- License: mit
- Created: 2022-01-04T21:14:39.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-31T12:48:17.000Z (about 2 months ago)
- Last Synced: 2024-11-02T21:32:02.313Z (about 2 months ago)
- Topics: anyio, async, asyncio, python, trio
- Language: Python
- Homepage: https://asyncer.tiangolo.com/
- Size: 868 KB
- Stars: 1,670
- Watchers: 17
- Forks: 59
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Citation: CITATION.cff
- Security: SECURITY.md
Awesome Lists containing this project
- best-of-python - GitHub - 80% open · ⏱️ 23.05.2024): (Asynchronous Programming)
README
Asyncer, async and await, focused on developer experience.
---
**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.
## 🚨 Warning
This small library only exists to be able to use these **utility functions** until (and if) they are integrated into **AnyIO**.
It will probably take some time for that to happen (or to be decided if it will be included or not).
So I made this to be able to use these ideas right now. 🤓
## Can I Use It?
Yes 🎉 (but continue reading).
You can use this and evaluate the **library API design** I'm proposing. It will probably be useful to know if it works and is useful for you (I hope so).
But still, consider this lab material, expect it to change a bit. 🧪
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 timeimport anyio
from asyncer import asyncifydef 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).