Async Python Is Secretly Deterministic
L'ajout du support asynchrone à une bibliothèque d'exécution durable soulève un défi fondamental : les workflows durables doivent rester déterministes pour permettre la reprise par replay. Les workflows Python asynchrones sont difficiles à rendre déterministes parce qu'ils lancent souvent de nombreuses étapes concurrentes qui s'exécutent et se terminent dans des ordres variables. Le fonctionnement du loop asyncio est central : les coroutines créent des tâches et l'event loop, mono‑thread, planifie ces tâches dans une file FIFO et ne les exécute qu'une à une jusqu'à ce qu'elles fassent un await. Cette planification FIFO signifie que l'ordre de création des tâches (par exemple via asyncio.gather) est déterministe, ce qui permet d'assigner des identifiants d'étape avant le premier await pour assurer un ordre reproductible lors du replay. Comprendre ces subtilités d'asyncio permet d'écrire du code à la fois concurrent et sûr pour les workflows durables, en garantissant la réexécution correcte des étapes incomplètes lors de la récupération.