Comment appeler une fonction synchrone depuis une méthode asynchrone en Python ? Qui ne s’est jamais posé la question ? Et bien, nous, si, et nous avons trouvé une solution élégante et de qualité grâce à la librairie asyncer, développée et maintenue par le développeur principal de FastAPI
A quoi ça sert ?
Vous avez développé un projet avec FastAPI utilisant du code synchrone et vous voulez passer vers du code asynchrone facilement ? Asyncer pourra vous aider dans un contexte de migration, vous profiterez alors des co-routine tout en gardant l’usage de votre code précédemment écrit.
Un exemple vaut mieux qu’un long discours (exemple tiré de la documentation officielle)
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)
Ici, grâce à Asyncify, vous pouvez appeler facilement votre méthode do_sync_work et lui passer une liste d’arguments
La librairie va plus loin et propose d’appeler du code asynchrone depuis du code synchrone (code bloquant)