async-python-patterns
Implémenter des motifs Python asynchrones
Également disponible depuis: wshobson,ActiveInferenceInstitute
Construisez des applications Python haute performance avec des motifs asyncio pour les opérations E/S concurrentes, les APIs asynchrones et les systèmes non-bloquants.
Télécharger le ZIP du skill
Importer dans Claude
Allez dans Paramètres → Capacités → Skills → Importer un skill
Activez et commencez à utiliser
Tester
Utilisation de "async-python-patterns". Comment exécuter plusieurs tâches asynchrones de manière concurrente en Python ?
Résultat attendu:
Utilisez asyncio.gather() pour exécuter plusieurs coroutines de manière concurrente. Exemple : results = await asyncio.gather(task1(), task2(), task3()). Pour la gestion des erreurs, utilisez return_exceptions=True pour attraper les échecs sans arrêter les autres tâches.
Utilisation de "async-python-patterns". Quelle est la différence entre asyncio.create_task et asyncio.ensure_future ?
Résultat attendu:
create_task() planifie une coroutine pour s'exécuter sur la boucle d'événements et retourne une Task (Python 3.7+). ensure_future() accepte à la fois les coroutines et les futures, retournant une Task. Utilisez create_task() pour les nouvelles coroutines ; utilisez ensure_future() lorsque vous pourriez recevoir un future existant.
Utilisation de "async-python-patterns". Comment ajouter un délai d'attente à une opération asynchrone ?
Résultat attendu:
Utilisez asyncio.wait_for() pour les délais d'attente simples : await asyncio.wait_for(async_func(), timeout=5.0). Pour plusieurs opérations, utilisez asyncio.wait() avec un timeout et gérez l'exception 'timeout' dans votre bloc try/except.
Audit de sécurité
SûrThis skill is a documentation and educational resource for async Python programming patterns. The static analyzer flagged 71 potential issues, but upon manual review, all findings are FALSE POSITIVES. The 'external_commands' detections are markdown code fences (backticks), 'network' detections are example URLs in documentation, and 'blocker' detections are benign documentation patterns. No actual security risks were found.
Motifs détectés
Score de qualité
Ce que vous pouvez construire
Construire une API web asynchrone
Créez une API REST haute performance utilisant FastAPI avec des requêtes de base de données concurrentes et des points de terminaison asynchrones
Récupération de données concurrente
Récupérez plusieurs ressources API simultanément en utilisant asyncio.gather avec une gestion appropriée des erreurs et des délais d'attente
Backend d'application en temps réel
Implémentez des serveurs WebSocket et une gestion asynchrone des messages pour des systèmes de chat ou de notifications en direct
Essayez ces prompts
Montrez-moi comment écrire une fonction asynchrone simple en Python qui récupère des données depuis une URL. Incluez une gestion d'erreur appropriée et un délai d'attente.
Je dois récupérer des données depuis 5 points de terminaison API différents de manière concurrente. Montrez-moi comment utiliser asyncio.gather avec return_exceptions=True pour la gestion des erreurs.
Créez un gestionnaire de contexte asynchrone qui se connecte à une base de données, produit une connexion, et la ferme correctement à la sortie. Incluez la gestion des erreurs.
Construisez une fonction asynchrone prête pour la production qui interroge une base de données avec un pool de connexions, implémente une logique de nouvelle tentative avec backoff exponentiel, inclut une journalisation structurée, et gère l'annulation gracieusement.
Bonnes pratiques
- Ajoutez toujours des délais d'attente pour empêcher le blocage indéfini - utilisez asyncio.wait_for() ou asyncio.timeout()
- Utilisez la concurrence structurée avec asyncio.TaskGroup (Python 3.11+) pour un nettoyage automatique
- Gérez explicitement les exceptions avec try/except à l'intérieur des fonctions asynchrones, ne laissez jamais les exceptions se propager silencieusement
Éviter
- N'utilisez pas d'appels synchrones bloquants à l'intérieur des fonctions asynchrones - cela bloque toute la boucle d'événements
- Évitez le 'fire and forget' sans suivi approprié des tâches - stockez les références Task pour permettre l'annulation
- Ne mélangez pas await et du code bloquant comme time.sleep() - utilisez asyncio.sleep() à la place