Я пишу код для тестирования многопоточных программ (домашняя работа студентов - скорее всего, ошибка) и хочу иметь возможность обнаруживать, когда они зашли в тупик. При правильном запуске программы регулярно выводят вывод в stdout, что делает его довольно простым: если нет выхода в течение X секунд, убейте его и сообщите о взаимоблокировке. Вот прототип функции:Инструменты для реализации сторожевого таймера в 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."""
Я могу написать это сам, но это немного сложнее, чтобы получить права, поэтому я предпочел бы использовать существующий код, если это возможно. Кто-нибудь написал что-то подобное?
Хорошо, см. Решение ниже. Модуль подпроцесса может также иметь значение, если вы делаете что-то подобное.