Як використовувати функцію sleep() для введення затримок у Python
У цьому посібнику ви опануєте методи застосування функції sleep()
з вбудованого модуля time
для додавання пауз у виконанні вашого коду на Python.
Коли ви запускаєте програму Python, її команди виконуються одна за одною, без будь-яких пауз. Проте, в певних ситуаціях може виникнути потреба у затримці виконання коду. Саме тут стане в нагоді функція sleep()
з модуля time
.
У цій статті ви ознайомитесь із синтаксисом та прикладами застосування sleep()
, щоб зрозуміти, як вона працює на практиці. Розпочнімо!
Синтаксис функції time.sleep()
у Python
Модуль time
, що входить до стандартної бібліотеки Python, надає різноманітні функції для роботи з часом. Першим кроком є імпорт модуля time
у ваше середовище:
import time
Оскільки sleep()
є частиною модуля time
, ви можете використовувати її, дотримуючись такого синтаксису:
time.sleep(n)
Тут n
– це кількість секунд, на яку потрібно зупинити виконання програми. Це може бути ціле число або число з плаваючою комою.
Іноді потрібна затримка може складати кілька мілісекунд. У такому випадку, перетворіть тривалість у мілісекундах на секунди і передайте її до функції sleep()
. Наприклад, для затримки у 100 мілісекунд потрібно вказати 0.1 секунди: time.sleep(0.1)
.
Ви також можете імпортувати лише функцію sleep()
з модуля time
:
from time import sleep
У цьому випадку, ви можете викликати sleep()
безпосередньо, не використовуючи time.sleep()
.
Тепер, коли ви ознайомилися з синтаксисом, перейдемо до прикладів коду.
Затримка виконання коду з sleep()
Розглянемо простий приклад, де sleep()
затримує виконання програми.
У коді нижче:
- Перша команда
print()
виконується одразу. - Потім, за допомогою
sleep()
, вводиться затримка у 5 секунд. - Друга команда
print()
виконається лише після завершення затримки.
# /python-sleep/simple_example.py
import time
print("Друкую зараз")
time.sleep(5)
print("Друкую після 5 секунд затримки")
Запустіть цей файл та спостерігайте за результатом:
$ python3 simple_example.py
Застосування різних затримок в кодовому блоці
У попередньому прикладі ми ввели фіксовану 5-секундну затримку. Тепер розглянемо приклад із різними затримками в циклі.
Нам потрібно зробити наступне:
- Розглянути речення, виділити кожне слово та вивести його на екран.
- Після виведення кожного слова, зробити паузу перед виведенням наступного.
Цикл по рядку рядків
Розглянемо речення. Це рядок, де кожне слово є окремим рядком.
Якщо ми пройдемося по рядку, ми отримаємо кожен символ, як показано нижче:
>>> sentence = "Який час це займе?"
>>> for char in sentence:
... print(char)
# Вивід (скорочений)
Я
к
и
й
.
.
.
м
е
?
Це не те, що нам потрібно. Нам потрібно пройтися по реченню та отримати доступ до кожного слова. Для цього ми можемо скористатися методом split()
. Він повертає список рядків, отриманих шляхом поділу по пробілах.
>>> sentence.split()
['Який', 'час', 'це', 'займе?']
>>> for word in sentence.split():
... print(word)
# Вивід
Який
час
це
займе?
Цикл з різними затримками
Повернемось до нашого прикладу:
sentence
– це рядок, який ми хочемо переглянути по словах.delay_times
– це список затримок, які ми будемо використовувати при кожному проході циклу.
Ми хочемо одночасно переглянути два списки: delay_times
і список слів, отриманий з речення. Для цього використовуємо функцію zip()
.
Функція zip(list1, list2)
повертає ітератор кортежів, де кожен кортеж містить елементи з індексом i
з list1
та list2
.
# /python-sleep/delay_times.py
import time
sleep_times = [3, 4, 1.5, 2, 0.75]
sentence = "Який час це займе?"
for sleep_time, word in zip(sleep_times, sentence.split()):
print(word)
time.sleep(sleep_time)
Без sleep()
програма відразу б перейшла до наступної ітерації. Завдяки затримці, наступний прохід циклу відбудеться лише після її завершення.
Запустіть delay_times.py
та подивіться на результат:
$ python3 delay_times.py
Слова будуть виведені з різними затримками. Затримка після виведення слова з індексом i
у рядку відповідає значенню з індексом i
у списку delay_times
.
Зворотний відлік часу в Python
Розглянемо приклад простого таймера зворотного відліку.
Визначимо функцію countDown()
:
# /python-sleep/countdown.py
import time
def countDown(n):
for i in range(n, -1, -1):
if i == 0:
print("Готові до старту!")
else:
print(i)
time.sleep(1)
Розберемо визначення функції countDown()
:
- Функція приймає число
n
як аргумент і починає відлік від цього числа до нуля. - Ми використовуємо
time.sleep(1)
для створення затримки в одну секунду між відліками. - Коли лічильник досягає 0, функція виводить “Готові до старту!”.
Для зворотного відліку ми використали функцію range()
з від’ємним кроком -1. range(n, -1, -1)
допоможе нам переглянути числа в діапазоні n, n-1, n-2
і так далі до нуля. Пам’ятайте, що кінцева точка виключається за замовчуванням при використанні range()
.
Додамо виклик countDown()
з аргументом 5.
countDown(5)
Запустіть скрипт countdown.py
:
$ python3 countdown.py
Функція sleep()
в багатопоточності
Модуль threading
в Python надає засоби для багатопоточності. Python Global Interpreter Lock (GIL) гарантує, що в будь-який момент часу виконується лише один активний потік.
Проте, під час операцій вводу-виводу і очікування, як sleep()
, процесор може призупинити виконання поточного потоку і переключитися на інший.
Розглянемо приклад.
Створення і запуск потоків в Python
Розглянемо функції func1()
, func2()
та func3()
. Вони проходять по діапазону чисел і виводять їх. Потім слідує затримка sleep()
. Ми використали різні затримки, щоб краще зрозуміти переключення між потоками.
import time
import threading
def func1():
for i in range(5):
print(f"Виконується t1, друкую {i}.")
time.sleep(2)
def func2():
for i in range(5):
print(f"Виконується t2, друкую {i}.")
time.sleep(1)
def func3():
for i in range(4):
print(f"Виконується t3, друкую {i}.")
time.sleep(0.5)
Для створення об’єкта потоку в Python використовується конструктор Thread()
. Використання синтаксису threading.Thread(target = ..., args = ...)
створює потік, який виконує цільову функцію з аргументами. У цьому випадку, функції func1
, func2
, func3
не приймають жодних аргументів, тому достатньо вказати лише назву функції як ціль. Потім створюємо об’єкти потоку t1
, t2
і t3
.
t1 = threading.Thread(target=func1)
t2 = threading.Thread(target=func2)
t3 = threading.Thread(target=func3)
t1.start()
t2.start()
t3.start()
Повний код для прикладу потоків:
# /python-sleep/threads.py
import time
import threading
def func1():
for i in range(5):
print(f"Виконується t1, друкую {i}.")
time.sleep(2)
def func2():
for i in range(5):
print(f"Виконується t2, друкую {i}.")
time.sleep(1)
def func3():
for i in range(4):
print(f"Виконується t3, друкую {i}.")
time.sleep(0.5)
t1 = threading.Thread(target=func1)
t2 = threading.Thread(target=func2)
t3 = threading.Thread(target=func3)
t1.start()
t2.start()
t3.start()
Виконання перемикається між трьома потоками. Потік t3
має найменшу затримку, тому призупиняється на короткий час. Потік t1
має найдовшу затримку – дві секунди, і завершує виконання останнім.
Для глибшого розуміння, прочитайте посібник з основ багатопоточності в Python.
Висновок
У цьому посібнику ви навчилися застосовувати функцію sleep()
для введення затримок у виконання коду.
Ви можете викликати функцію sleep()
з вбудованого модуля time
, використовуючи синтаксис time.sleep()
. Щоб призупинити виконання на n
секунд, використовуйте time.sleep(n)
. Ви також розглянули приклади затримки ітерацій циклу, зворотного відліку і роботи з багатопоточністю.
Тепер ви можете глибше ознайомитися з можливостями модуля time
. Бажаєте працювати з датами і часом в Python? Окрім модуля time
, ви можете використовувати модулі datetime
та calendar
.
Далі ви навчитесь обчислювати різницю в часі в Python. ⏰