Timeout function if it takes too long to finish [duplicate]
Функция тайм-аута, если для завершения требуется слишком много времени
У меня есть скрипт оболочки, который перебирает текстовый файл, содержащий URL: ы, который я хочу посетить и сделать скриншоты.
Все это делается просто. Скрипт инициализирует класс, который при запуске создает скриншот каждого сайта в списке. Некоторым сайтам требуется очень, очень много времени для загрузки, а некоторые могут вообще не загружаться. Итак, я хочу обернуть screengrabber-функцию в скрипт тайм-аута, заставляя функцию возвращаться False если она не может завершиться в течение 10 секунд.
Я доволен самым простым возможным решением, возможно, установкой асинхронного таймера, который будет возвращать False через 10 секунд независимо от того, что на самом деле происходит внутри функции?
Переведено автоматически
Ответ 1
Процесс тайм-аута операций описан в документации для signal.
Основная идея заключается в использовании обработчиков сигналов для установки будильника на некоторый интервал времени и создания исключения по истечении этого таймера.
Обратите внимание, что это будет работать только в UNIX.
Вот реализация, которая создает декоратор (сохраните следующий код как timeout.py).
import errno import os import signal import functools