Как остановить выполнение функции в Python?
Для остановки выполнения функции в Python можно использовать ключевой оператор return . Когда функция достигает этого оператора, она прекращает выполнение и возвращает указанное значение.
def func(): print('Часть функции, где код сработает') x = 11 return x # Функция возвращает значение переменной x и завершает свою работу. print('Эта часть функции - нет') y = 22 return y a = func() print(a) # => Часть функции, где код сработает # => 11
Метод time.sleep() в Python
Метод python sleep(), используемый для приостановки выполнения для заданного времени (в секундах). Мы можем использовать функцию ожидания python, чтобы остановить выполнение программы за заданное время в секундах. Фактическое время приостановки может быть меньше запрошенного, потому что любой пойманный сигнал прекратит сон() после выполнения ловушки этого сигнала. Кроме того, время приостановки может быть больше, чем запрашивается произвольной суммой из-за планирования другой активности в системе. Вы можете установить задержку в своем скрипте Python, передав количество секунд, которые вы хотите отложить, к функции сна.
import time time.sleep(5) #задержка в течение 5 секунд
Когда вы запустите приведенный выше Пример:, он завершится только через пять секунд.
Метод sleep() поддерживает числа с плавающей запятой, что означает, что вы можете заставить его также ждать доли секунды.
import time time.sleep(1.500)
Когда вы запускаете приведенный выше Пример:, программа ждет завершения 1 секунды и 500 миллисекунд.
time.sleep (1) # sleep в течение 1 секунды time.sleep (60) # сон в течение 1 минуты time.sleep (3600) # сон в течение 1 часа
Задержка времени для бесконечного цикла
Вот еще один пример когда что-то выполняется примерно каждые 5 секунд.
import time while True: print("Thi smessage prints each 5 seconds") time.sleep(5) # Задержка в течение 5 секунд
Вышеупомянутая программа запускает бесконечный цикл, поэтому вы должны принудительно остановить программу, когда захотите.
Сон программы
Следующая программа представляет собой пример обратного отсчета, используя метод ожидания, чтобы подождать 1 секунду каждого номера.
import time wait = 10 while wait > 0: print(wait) time.sleep(1) wait = wait - 1
Thread и Sleep
Темы, как правило, содержатся в процессах. В рамках одного процесса может существовать более одного потока. Эти потоки разделяют память и состояние процесса. В следующем примере вы можете увидеть, как метод sleep() работает в многопроцессорной программе.
import time from threading import Thread class Main_Thread(Thread): def run(self): for x in range(100, 104): print(x, " - Main Thread") time.sleep(5) class Service_Thread(Thread): def run(self): for x in range(1, 16): print(x) time.sleep(1) Main_Thread().start() Service_Thread().start()
100 - Main Thread 1 2 3 4 5 101 - Main Thread 6 7 8 9 10 102 - Main Thread 11 12 13 14 15 103 - Main Thread
Точность time.sleep()
Time.sleep (секунды) не в реальном времени. Функция time.sleep() использует функцию sleep() базовой операционной системы, иногда она может быть отключена с точки зрения миллисекунд. Большинство ПК-машин имеют аппаратные ограничения в диапазоне 1-10 мс, независимо от операционной системы. В операционной системе time.sleep() просто означает подсказку. Это не хороший механизм синхронизации, но достаточно хорош для большинства приложений. Как правило, однако, если вы не хотите спать в течение очень небольшого периода времени, вы можете вообще игнорировать эту информацию.
import time sleep_start = time.time() for cnt in range(0,10): print(cnt) time.sleep(1) # 1 sec delay sleep_end = time.time() diff = sleep_end - sleep_start print("Looping time :",diff)
Looping time : 10.040287017822266
Завершение программы в Python
Однако, там не было объяснения какой метод лучше. Какой метод является наиболее «безаварийным»? И заодно: есть ли в Python понятие Autocloseable объектов? Если я сделаю ранее завершение программы, нужно ли мне будет закрывать файлы и т.д.?
Отслеживать
7,797 13 13 золотых знаков 25 25 серебряных знаков 55 55 бронзовых знаков
задан 17 окт 2015 в 16:11
1,337 4 4 золотых знака 17 17 серебряных знаков 34 34 бронзовых знака
17 окт 2015 в 16:23
Спасибо! Лучшим решением является использование sys.exit()
17 окт 2015 в 16:28
на счет второго: лучше закрывать/завершать все операции перед завершением программы
17 окт 2015 в 16:32
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Короткий ответ:
Лучше использовать sys.exit()
Механизм завершения процесса в Python реализован через бросание исключения SystemExit , таким образом можно просто создать подобное исключение и программа завершится:
raise SystemExit # или даже передать число -- код ошибки завершения программы raise SystemExit(1)
Функция exit и аналогичная ей quit созданы для удобства работы в интерактивном режиме и их не рекомендуется использовать внутри скриптов:
They are useful for the interactive interpreter shell and should not be used in programs.
По факту они также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:
>>> quit Use quit() or Ctrl-D (i.e. EOF) to exit >>> exit Use exit() or Ctrl-D (i.e. EOF) to exit
Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.
Есть также дополнительный метод для немедленного завершения программы: os._exit . У него довольно специфическая область применения, и там же есть замечание:
The standard way to exit is sys.exit(n)
Т.е. здесь даётся подтверждение того, что стандартный способ завершения программы — это вызов sys.exit .
Функция os.abort , упомянутая вами, использует механизм сигналов процессу. Конкретно при вызове этой функции будет передан сигнал SIGABRT , что в linux приведёт к завершению программы и созданию дампа памяти процесса. Подобное завершение рассматривается операционной системой как аварийное, поэтому не стоит использовать его для безаварийного завершения приложения.
По второй части вопроса. В Python есть развитая система контекстных менеджеров: классов, которые умеют работать с оператором with . Самое частое использование этого механизма встречается, вероятно, с файлами.
with open('filename') as my_file: print(my_file.read())
Этот код откроет файл, напечатает его содержимое на экран и закроет файл автоматически, даже если возникнет исключение при его печати.
Для классов, которые не приспособлены для работы с with есть функция closing в библиотеке contextlib . Из документации:
with closing(.open()) as f:
is equivalent to this:
f = .open() try: finally: f.close()
Вот небольшой пример работы этой функции:
import contextlib class Closeable: def close(self): print('closed') with contextlib.closing(Closeable()): pass # печатает closed
Теперь небольшое отступление о том, почему стоит использовать конструкцию with .
Известно, что программа завершится от любого необработанного исключения, а не только от SystemExit . Таким образом, если в вашем коде используются какие-то ресурсы, которые требуется правильным образом закрывать перед завершением работы, нужно оборачивать работу с ними в блоки try . finally . .
Однако, при использовании конструкции with это оборачивание происходит автоматически, и все ресурсы закрываются корректно.
Так как выход из программы — это всего лишь брошенное исключение, то и в случае использования функции sys.exit закрытие открытых в операторе with ресурсов произойдёт корректно:
with contextlib.closing(Closeable()): sys.exit() # напечатает closed
Вы можете писать также и свои классы, предоставляющие ресурсы или классы, оборачивающие другие, которые нужно уметь закрывать автоматически. Для этого используются методы __enter__ и __exit__ .
- Похожий вопрос с англоязычного StackOverflow
- Функции, добавляемые модулем site
- Документация по конструкции with
- Документация по функции closing
- Документация по исключению SystemExit
- Документация по функции os._exit
- Документация по функции sys.exit
- Документация по функции os.abort
- Описание системного сигнала SIGABRT
Как выйти из программы в Python 3





Как выйти из программы в Python 3 при помощи разных самых простых команд, методов, функций, операторов. Как корректно завершить работу программы и избежать различных ошибок?
Версия Python 3.5
Стандартный способ завершения программы в Python
Для этого варианта первую строчку ниже нужно прописать в самом начале файла, так как любой импорт пакетов или модулей производится только в самом начале файла. А уже в нужном месте кода для остановки и выхода из программы следует прописать вторую строчку кода. Если поискать, в интернете можно найти информацию, что данный вариант является самым оптимальным. Также программисты пишут, что данная функция лежит в стандартном модуле и поэтому всегда доступна.
Вызов sys.exit() — стандартный способ завершения программы в Python. Но это не так, если не подключить модуль, она не сработает.
import sys sys.exit()
Функция exit() для выхода из программы в Python 3
А вот функция exit() поможет не просто прервать выполнения цикла, но и полностью останавливает программу, код далее не читается. В переводе с английского exit — выход. Кстати, подключать для вызова и корректной работы данной функции в Python 3.5 никакой модуль не нужно — она прекрасно работает и так.
Также была найдена информация, что exit() является помощником для интерактивной оболочки (консоли), тем временем как sys.exit предназначен для использования в программах.
exit()
Кстати, функция quit() также работает для закрытия программы на Python и не требует для своей работы подключения каких-либо модулей.
quit()
Оператор break также может закрыть выполнение программы. Чаще он используется именно в цикле для выхода з него, выполнение программы продолжится далее по коду. В переводе с английского break — перерыв.