Skip to main content
Weave envoie les données de trace dans des threads d’arrière-plan afin de minimiser l’impact sur les performances de votre application. Cependant, lorsque vous utilisez un système multiprocessus, une file d’attente de tâches ou des processus worker comme Celery, Weave perd des données de trace si le processus worker se termine avant que les threads d’arrière-plan n’aient fini d’envoyer les traces. Pour éviter la perte de données dans les processus worker, vous devez vous assurer que les envois en arrière-plan sont terminés en appelant client.flush() ou client.finish() avant la fin de la tâche du worker. Cela est utile lorsque vous travaillez dans des environnements éphémères comme AWS Lambda, Google Cloud Run ou des notebooks qui se ferment juste après l’exécution. Ces méthodes ont des objectifs différents :
  • weave.flush(): Vidage simple et silencieux. Recommandé lorsque Weave est intégré à des processus worker ou à des environnements CI.
  • weave.finish(): Inclut un suivi de progression avec une barre de progression ou des callbacks de statut. Recommandé pour les scripts ou notebooks interactifs.
Les deux méthodes bloquent jusqu’à ce que tous les envois en arrière-plan soient terminés, ce qui garantit qu’aucune donnée de trace n’est perdue lorsque le processus worker se termine. L’exemple suivant montre client.finish() :
from celery import Celery
import weave

app = Celery('tasks')

@app.task
def process_task(input_data):
    weave.init("your-team-name/your-project-name")

    try:
        # La logique de votre tâche qui crée des traces
        result = your_processing_function(input_data)

        # S'assurer que toutes les traces sont envoyées avant la fin de la tâche
        weave.finish()

        return result
    finally:
        pass
Vous pouvez aussi utiliser le gestionnaire de contexte with pour appeler automatiquement weave.finish() à la fin du bloc :
with weave.init("your-team-name/your-project-name") as client:
    result = your_processing_function(input_data)

    return result
Vous pouvez également améliorer les performances de votre application grâce à weave.flush(). Voir Flushing pour en savoir plus.
Données de trace Performances