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