J'écris du code pour tester des programmes multithread (devoirs de l'étudiant - probablement buggés), et je veux être capable de détecter quand ils sont bloqués. Lorsqu'ils s'exécutent correctement, les programmes produisent régulièrement des sorties sur stdout, ce qui rend la procédure assez simple: si aucune sortie n'a lieu pendant X secondes, tuez-la et signalez un blocage. Voici le prototype de fonction:Outils pour implémenter un timer de surveillance en python
def run_with_watchdog(command, timeout):
"""Run shell command, watching for output. If the program doesn't
produce any output for <timeout> seconds, kill it and return 1.
If the program ends successfully, return 0."""
Je peux écrire moi-même, mais il est un peu difficile à trouver à droite, donc je préfère utiliser le code existant si possible. Quelqu'un a écrit quelque chose de similaire?
Ok, voir la solution ci-dessous. Le module de sous-processus peut également être pertinent si vous faites quelque chose de similaire.