2011-12-25 3 views
1

Sur mon serveur écrit en Stackless Python, j'ai de temps en temps de grandes pics d'utilisation de l'UC pendant 5 à 10 secondes. Cela arrive sporadiquement, donc j'ai du mal à le suivre.Stackless Python - temps d'exécution d'une seule tâche de profil

J'ai utilisé cProfile pour essayer de déterminer d'où viennent ces pics, mais cProfile donne une image globale de l'endroit où l'heure est dépensée par fonction. Ce que je voudrais vraiment savoir, c'est si les pointes de CPU sont dues à un traitement se produisant dans une seule tasklet (et bloquant d'autres tasklets) ou si plusieurs tasklets effectuent beaucoup de traitement (par exemple, quand chacun devient actif, chacun fait beaucoup de travail).

Existe-t-il un moyen pratique de se connecter au planificateur dans Stackless Python afin de pouvoir ajouter du code de timing? En d'autres termes, y a-t-il une fonction qui est invoquée quand une tasklet devient active et quand elle devient inactive que je peux accrocher?

Répondre

0

Je n'ai pas trouvé de fonction explicite à utiliser lorsqu'une tasklet bloque/reprend, mais puisque Channel.receive() est typiquement quand le bloc/resume se produit, j'ai accroché à chaque occurrence de ce qui se passe.