Перейти к содержимому

Как ограничить время выполнения программы в python

  • автор:

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Как ограничить время выполнения скрипта?

#1 Окт. 22, 2010 13:01:52

POLL От: Зарегистрирован: 2010-03-18 Сообщения: 10 Репутация: 0 Профиль Отправить e-mail

Как ограничить время выполнения скрипта?

Добрый День!
Столкнулся с такой ситуацией.

for row in cursor.fetchall(): 
os.system("python generate.py " + row[0])
time.sleep(1)
try:
cursor1.execute("""UPDATE links SET created = 1 WHERE domain = %s""", (row[0]) );
db1.commit()
except:
db1.rollback()

В строке os.system(“python generate.py ” + row)
запускается generate.py, который открывает оконное приложение (gtk, gtkmozembed) и выполняет различные действия.
Иногда этот скрипт отрабатывает слишком долго.
1) Как сделать так, чтобы скрипт при превышении допустим 30 секунд переходил на следующую итерацию?
2) Как можно в оконном приложении (в generate.py) отключить появление алертов? (предупреждающие сообщения с кнопкой OK)

Как ограничить время выполнения функции и реализовать добавление новых функций

Как ограничить время выполнения функции
Есть функция main, которая вызывает функцию doter. doter должна работать заданное время. Я не.

Как ограничить время выполнения программы?
Добрый день! Задали написать программу, следующего содержания: "Для натурального числа сумма.

Как ограничить время выполнения программы?
При выполнении макроса у меня получается(непонятно где) бесконечный цикл. Можно ли просто как-то.

Ограничить время выполнения метода
Привет! Есть у меня один метод, который может выполняться очень долго, а может и за пару секунд.

17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import time import threading def function(x,T): t=time.time() while time.time()-tT: pass print(f' закончил выполнение\n') class Start(): def __ini__(self): self.run() def run(self): for i in range(5): threading.Thread(target=function, args=(i,5,)).start() if __name__ == '__main__': Start().run()

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Ограничить время выполнения команды
Собственно сабж, как можно реализовать ограничение на время работы команды. Допустим, если если.

Ограничить время выполнения HTTP запроса
Всем привет Имеется код, работающий на отдельном сервисе BufferedReader rdr = null;.

Ограничить время ожидания выполнения TADOQuery.Open
Добрый день, Пишу на Delphi 7, мне нужно сделать чтобы если выполнение TADOQuery продолжается.

Как реализовать паузу во время выполнения программы
Как реализовать паузу во время выполнения программы

Создание новых компонентов во время выполнения программы
Здравствуйте! Я хочу написать для себя программу-органайзер на Windows Forms Visual C++. Основы.

Ограничить время выполнения операции (прервать команду внешней библиотеки)
Здравствуйте В своем проекте использую закрытую библиотеку owen_io.dll (компания ОВЕН), для.

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

Я столкнутся с проблемой функции которая или зависает или выполняется слишком долго (иногда):

response = requests.get(url)
parsed_body = html.fromstring(response.text)
title = parsed_body.xpath(‘//title/text()’)

Возможно это из-за интернета или сайта или чего-то еще. Как я могу «сказать» пиону что у функции есть максимально допустимое время выполнения?

  • Вопрос задан более трёх лет назад
  • 6300 просмотров

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) — останавливает таймер.

Вставим signal в пример:

#!/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» библиотеку.

P.S.

Можно сделать через библиотеку 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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *