Asyncer
Asyncer, async and await, focused on developer experience.
Install / Use
/learn @fastapi/AsyncerREADME
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 <abbr title="synchronous code, code that is not async">blocking code</abbr>, 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
<div class="termy">$ pip install asyncer
---> 100%
Successfully installed asyncer anyio
</div>
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():
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.
Related Skills
node-connect
334.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
82.1kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
82.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
334.1kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
