Я посмотрел онлайн и нашел несколько советов по обсуждению и ActiveState для запуска некоторого кода с таймаутом. По-видимому, есть несколько общих подходов:
- Используйте поток, который запускает код, и
join
он с таймаутом. Если тайм-аут истек - уничтожьте поток. Это не поддерживается непосредственно в Python (используется частная функция_Thread__stop
), поэтому это плохая практика - Используйте
signal.SIGALRM
- но этот подход не работает в Windows! - Использовать подпроцесс с таймаутом - но это тяжелый - что, если я хочу часто запускать прерывистую задачу, я не хочу, чтобы каждый из них выполнял пожар!
Итак, что такое правильный путь? Я не спрашиваю об обходных решениях (например, используйте Twisted и async IO), но фактический способ решить актуальную проблему - у меня есть функция, и я хочу запустить ее только с некоторым таймаутом. Если тайм-аут истек, я хочу вернуться обратно. И я хочу, чтобы он работал на Linux и Windows.