Python ограничить время выполнения функции

Тайминг в Python

Python – язык программирования, который можно отнести к общему назначению. С его помощью пишут как бизнес-софт, так и развлекательный (игровой) контент. Это отличное решение для новичков в разработке. Относится к объектно-ориентированному типу.

В данной статье будет рассказано о том, что собой представляет задержка в Python, как использовать time (таймер), для чего все это нужно. Информация пригодится даже опытным разработчикам, которые планируют работу со временем в будущей утилите.

Ключевые термины

Пытаясь освоить Python, программеру потребуется выучить немало теории. Вот базовые термины, без которых время и остальные компоненты кодификаций применять на деле не получится:

  1. Ключевое слово – зарезервированное системой слово или фраза. Обозначает действие, операцию, функцию. Ключевики не могут выступать в виде имен переменных.
  2. Переменная – именованная ячейка памяти, которую можно изменять, сохранять и считывать.
  3. Алгоритм – последовательность действий, набор правил, помогающих решать те или иные задачи.
  4. Класс – набор связанных между собой объектов, которые имеют общие свойства.
  5. Объект – комбинация переменных, констант и иных структурных единиц. Они выбираются совместно и аналогичным образом проходят обработку.
  6. Константа – значение, которое не будет меняться на протяжении всего выполнения утилиты.
  7. Тип данных – классификация информации определенного вида.
  8. Массив – множество данных. Они предварительно группируются.

Огромную роль в Python играют ключевые слова. Их необходимо либо запоминать, либо заучивать, либо держать где-то поблизости справочник с соответствующими данными. Иначе при объявлении переменных не исключены проблемы.

Читайте также:  Netbeans for java jdk

Задержка – это…

Задержка – термин, который применим ко времени. Он встречается и в обыденной жизни. Это – ситуация, когда что-то происходит или должно осуществиться не сразу. Пример – после наступления каких-то обстоятельств.

В программировании задержка «откладывает» выполнение кода на определенное время. Часто такая потребность возникает тогда, когда нужно дождаться завершения иного процесса, чтобы задействовать далее полученный результат.

При рассмотрении многопоточных утилит, использовать таймер (timer) и время (time) нужно, чтобы дождаться завершения операции и функций из других потоков.

Класс Timer

Класс Timer () в Python отвечает за время и работу с ним «от начала по конца». Модуль, метод, используемый для задержки и всего, что с ней связано. Перед использованием оного требуется произвести импорт компонента.

Для этого подойдет запись типа import time в Python. Класс относится к модулю threading. Он создает таймер, который запускает функцию с аргументами и ключевыми значениями (kwargs). Происходит это за счет time, установленного как interval. Этот параметр указывается в секундах.

Программеру предстоит запомнить следующее:

  • Запись функции с классом, отвечающего за таймаут (timeout) –
  • Если args равен None (этот показатель устанавливается изначально), Python использует пустой список.
  • Когда ключевое слово kwargs равен None, применяется пустой словарь.
  • Класс «Таймер» представлен действием, которое нужно запускать только по прошествии конкретного промежутка времени.
  • Таймер выступает в виде подкласса threading.Thread().

Все это требуется запомнить. А еще – учесть, что в процессе коддинга предстоит использовать суперкласс (super class), а также мета данные.

Функции

Рассматривая methods time, программисту требуется изучить разнообразные функции, связанные со временем. Это поможет лучше разобраться в потоках и задержках. Не стоит забывать, что при тестинге важно использовать print. Эта операция выводит результат на экран.

Time.Time

Функция Time() будет возвращать число секунд, которые прошли с начала эпохи. Для Unix-систем это – 1.01.1970. Отсчет с 12 часов ночи ровно.

Ctime()

Компонент, который будет в виде аргумента в Python принимать количество секунд, прошедших с самого начала эпохи. Результат – возврат строки по местному time.

Sleep

Отвечает за непосредственную задержку. Откладывает исполнение нынешнего потока на заданное количество секунд.

Класс struct_time

Изучая, какой метод подойдет для работы с таймерами и super class, стоит обратить внимание на struct_time. Этот объект может быть принят некоторыми функциями в упомянутом ранее модуле. При обработке оного происходит возврат.

Реализация Sleep

Когда нужный метод для работы с задержкой изучен, можно рассмотреть то, как сделать таймаут. Для этого используют super class, а также sleep. Он проходит реализацию несколькими способами:

  • Через time.sleep(). Это – встроенная возможность Python. Отвечает за таймаут через модуль time. Откладывает выполнение потока на установленное количество секунд.

  • Вызов с декораторами. Активируют, когда одно неудачно выполненное действие требуется запустить снова.

  • В потоках. Такие ситуации требуют, чтобы приложение избегало простоя. Для этого применяют или time.sleep(), или Event.wait() из модуля threading.
  • Из Async IO. Асинхронные возможности появились в Питоне, начиная с 3.4 версии. Это – тип параллельного программирования.

  • В Tkinter и wxPython. Отсрочки возможны при создании пользовательских интерфейсов. При применении sleep() внутри GUI кода блокируется цикл обработки событий.
  • After(). Это – метод, который погружает в сон для Tkinter. Часть стандартной библиотеки.

  • CallLater. Метод для wxPython. Имеет больше виджетов и хорошо годится для нативной разработки.

А вот видео, где можно наглядно увидеть работу с таймером в Python. Лучше разобраться с этой темой, как и с языком программирования, помогут дистанционные компьютерные курсы. Программы рассчитаны на срок до года. В конце будет выдан электронный сертификат. В процессе пользователи получат не только хорошо поданный учебный материал, но и новые полезные связи. А еще – соберут портфолио для трудоустройства.

Источник

Python. Прервать выполнение скрипта по времени

Бывают ситуации, когда надо ограничить время выполнения скрипта. К примеру, в программе есть запрос к удалённому серверу, который может длиться сколь угодно долго. В таком случае надо сделать прерывание выполнения функции при длительном простое. В этой статье рассмотрю простейший способ создания такого прерывания.

Рабочая среда: Linux Mint + Python (версия 2.7.12).

Программист: я — непрофессионал в Python. За всю жизнь написал на нём меньше тысячи строк кода. Поэтому формулировки могут быть неточными. Изучать Python не хочу, потому что использую его для очень простых задач.

Методы: Реализуем прерывание через библиотеку «signal». Потому что это самый простой способ.

Прерывание выполнения скрипта по времени

Возьмём простую тестовую программу:

#!/usr/bin/python -i
import time
try:

time.sleep(5)

except Exception as e:

print e

Здесь time.sleep(5) — это пятисекундная задержка. Она будет выполнять роль функции, которая может исполняться очень долго. И нам необходимо ограничить время её выполнения — прервать через 2 секунды.

Воспользуемся библиотекой «signal». Signal представляет собой таймер, который будет считаться в фоновом режиме, параллельно с программой. На работу Signal не влияет ничего, в том числе задержка через time.sleep(5) . Signal сработает (выдаст Exception) в любом случае, как только таймер отсчитает нужное количество секунд.

signal.alarm(N) — запускает таймер сигнала на N секунд

signal.alarm(0) — останавливает таймер.

#!/usr/bin/python -i
import signal
import time
try:

signal.alarm(2)
time.sleep(5)
signal.alarm(0)

except Exception as e:

print e

Посмотрим внимательнее на скрипт. Сначала запускается двухсекундный отсчёт signal.alarm(2) , затем пятисекундная задержка time.sleep(5) . В конце выполняется команда signal.alarm(0) , которая останавливает отсчёт до срабатывания сигнала.

Как можно догадаться, с таким скриптом Exception всегда будет срабатывать. Потому что задержка в 5 секунд выполняется дольше, чем время ожидания сигнала в 2 секунды.

Попробуйте изменить время сна с time.sleep(5) на time.sleep(1) . И Exception не будет происходить.

Специфический ответ от signal

В приведённом примере во время вызова Exception в переменной «e» будет находиться текст «Сигнал таймера». Это не информативно. Но есть способ задать этот текст:

#!/usr/bin/python -i
import signal
import time

def signal_handler(signum, frame):

raise Exception(» Script is too slow! «)

signal.signal(signal.SIGALRM, signal_handler)

try:

signal.alarm(2)
time.sleep(5)
signal.alarm(0)

except Exception as e:

print e

Теперь во время прерывания будет печататься текст » Script is too slow! «.

Заключение

Если вам понадобится ограничить время работы python скрипта, то легче всего это можно сделать через «signal» библиотеку.

Можно сделать через библиотеку thread, но там больше заморочек.

Публикации из этого раздела:

  • Bitrix загрузить файл в свойство через форму — Загрузка файла на сайт — это довольно рядовой процесс. Но как загрузить пользовательский файл в свой.
  • PHP заменить в строке — str_replace — Продолжаю рубрику шпаргалок PHP. В прошлый раз писал про обрезку строк. Вторая востребованная функци.
  • PHP есть ли значение в массиве — in_array — Одной из часто встречающихся функцией в php является in_array. Эта функция проверяет присутствует ли.
  • Как удалить любое приложение на Android — Купив новый телефон от фирмы iTel из ценовой категории «бабушкафон» (самый дешёвый), обнаружил, что .
  • WordPress 4.6 — cURL error 23 (продолжение) — До сих пор мучаюсь с новой версией WordPress 4.6. Как уже писал в статье «WordPress 4.6 — cURL error.
  • Украсть пароль из буфера обмена — Так уж получилось, что храню все пароли в открытом виде, в текстовых файлах. Конечно, это небезопасн.
  • Android. Отключение автозапуска программ — В этой статье расскажу, как именно можно отключить программы из автозагрузки, чтобы они не занимали .
  • Резервные копии из папок. Хранение бэкапов — Часто простые домашние пользователи хранят данные на единственном диске, в одном экземпляре. Это нео.

4 комментариев к “ Python. Прервать выполнение скрипта по времени ”

Благодарю!
Насколько понял, в моём случае скрипт исполняется Python’ом версии 2.7.12 . Выяснял так:
import sys
print (sys.version)

Источник

Оцените статью