Python Language Idée commune à propos de l'asyncio


Exemple

L'idée fausse la plus commune à propos de asnycio est asnycio qu'il vous permet d'exécuter n'importe quelle tâche en parallèle, en contournant le GIL (Global Interpreter Lock) et donc en exécutant des jobs de blocage en parallèle (sur des threads séparés). ça ne marche pas !

asyncio (et les bibliothèques asyncio pour collaborer avec asyncio ) asyncio sur des coroutines: des fonctions qui (en collaboration) renvoient le flux de contrôle à la fonction appelante. Notez asyncio.sleep dans les exemples ci-dessus. Voici un exemple de coroutine non bloquante qui attend en arrière-plan et redonne le contrôle à la fonction appelante (lorsqu'elle est appelée avec await ). time.sleep est un exemple de fonction de blocage. le flux d'exécution du programme s'arrêtera juste là et ne reviendra qu'après que time.sleep soit terminé.

un exemple réel est la bibliothèque de requests qui consiste (pour le moment) en fonctions de blocage uniquement. il n'y a pas de concurrence si vous appelez l'une de ses fonctions dans asyncio . aiohttp d'autre part a été construit avec asyncio à l'esprit. ses coroutines seront concurrentes.

  • Si vous avez des tâches liées au processeur qui asyncio longtemps, que vous souhaitez exécuter en parallèle asyncio n'est pas pour vous. pour cela, vous avez besoin de threads ou de multiprocessing .

  • Si vous avez des travaux liés aux E / S en cours d'exécution, vous pouvez les exécuter simultanément en utilisant asyncio .