Ovaj vodič će vas uputiti kako da koristite funkciju sleep()
iz Python-ovog ugrađenog modula time
, kako biste u svoj kod uveli vremenska kašnjenja.
Kada pokrenete jednostavan Python program, izvršavanje koda odvija se sekvencijalno – jedna naredba za drugom – bez ikakvog zastoja. Međutim, postoje situacije kada je potrebno odložiti izvršavanje koda. Funkcija sleep()
, koja je sastavni deo time
modula, upravo to omogućava.
U ovom tekstu ćete se upoznati sa sintaksom korišćenja sleep()
funkcije u Python-u, zajedno sa nekoliko primera koji će vam pomoći da shvatite kako ona radi. Počnimo!
Sintaksa Python funkcije time.sleep()
Modul time
, koji je integrisan u standardnu Python biblioteku, nudi razne korisne funkcije povezane s vremenom. Prvi korak je uvoz modula time
u vaš radni prostor:
import time
Pošto je sleep()
funkcija deo modula time
, možete joj pristupiti i koristiti je prema sledećem opštem obrascu:
time.sleep(n)
Ovde je n
broj sekundi za koliko želite da zaustavite izvršavanje programa. n
može biti ceo broj ili decimalni broj.
Ponekad je potrebno kašnjenje od samo nekoliko milisekundi. U tim slučajevima, možete konvertovati vreme u milisekundama u sekunde i koristiti ga u pozivu funkcije sleep()
. Na primer, kašnjenje od 100 milisekundi biste odredili kao 0.1 sekundu: time.sleep(0.1)
.
Takođe je moguće uvesti samo sleep()
funkciju iz time
modula:
from time import sleep
Ako koristite gornji metod uvoza, možete direktno pozvati funkciju sleep()
– bez upotrebe time.sleep()
.
Sada kada ste savladali sintaksu Python sleep()
funkcije, pređimo na primere koda koji će vam pokazati kako se ona koristi u praksi. Python skripte korišćene u ovom vodiču dostupne su u python-sleep
folderu na ovom GitHub repozitorijumu. 👩🏽💻
Odlaganje izvršenja koda pomoću sleep()
Kao prvi primer, upotrebićemo funkciju sleep()
da odložimo izvršavanje jednostavnog Python programa.
U sledećem isečku koda:
- Prva
print()
naredba se izvršava odmah. - Zatim uvodimo kašnjenje od 5 sekundi pomoću funkcije
sleep()
. - Druga
print()
naredba će se izvršiti tek nakon što se pauza završi.
# /python-sleep/simple_example.py
import time
print("Print now")
time.sleep(5)
print("Print after sleeping for 5 seconds")
Sada pokrenite datoteku simple_example.py
i pogledajte izlaz:
$ python3 simple_example.py
Dodavanje različitih kašnjenja u blok koda
U prethodnom primeru, imali smo fiksno kašnjenje od 5 sekundi između dve print()
naredbe. Sada ćemo napraviti još jedan primer da bismo primenili različita vremena kašnjenja tokom iteracije kroz neki iterabilni objekat.
U ovom primeru, želimo da uradimo sledeće:
- Proći kroz rečenicu, pristupiti svakoj reči i odštampati je.
- Nakon štampanja svake reči, želimo da sačekamo određeno vreme pre nego što odštampamo sledeću reč u rečenici.
Prolazak kroz niz stringova
Razmotrimo niz, rečenicu. To je niz gde je svaka reč string za sebe.
Ako prođemo kroz string, dobićemo svaki karakter, kao što je prikazano:
>>> sentence = "How long will this take?"
>>> for char in sentence:
... print(char)
# Izlaz (skraćen radi čitljivosti)
H
o
w
.
.
.
t
a
k
e
?
Međutim, to nije ono što želimo. Želimo da prođemo kroz rečenicu i pristupimo svakoj reči. Da bismo to uradili, možemo pozvati metodu split()
na stringu rečenice. Ovo će vratiti listu stringova – dobijenu deljenjem stringa rečenice – na svim pojavljivanjima razmaka.
>>> sentence.split()
['How', 'long', 'will', 'this', 'take?']
>>> for word in sentence.split():
... print(word)
# Izlaz
How
long
will
this
take?
Prolazak kroz iterabilne objekte sa različitim kašnjenjima
Vratimo se na primer:
sentence
je niz kroz koji želimo da prođemo da bismo pristupili svakoj reči.delay_times
je lista vremena kašnjenja koju ćemo koristiti kao argument funkcijisleep()
tokom svakog prolaska kroz petlju.
Ovde želimo istovremeno da prođemo kroz dve liste: listu delay_times
i listu stringova dobijenu deljenjem stringa sentence
. Možete koristiti funkciju zip()
da izvršite ovu paralelnu iteraciju.
Python funkcija zip()
: zip(lista1, lista2)
vraća iterator torki, gde svaka torka sadrži element sa indeksom i iz lista1
i lista2
.
# /python-sleep/delay_times.py
import time
sleep_times = [3,4,1.5,2,0.75]
sentence = "How long will this take?"
for sleep_time,word in zip(sleep_times,sentence.split()):
print(word)
time.sleep(sleep_time)
Bez funkcije sleep()
, kontrola bi odmah prešla na sledeću iteraciju. Pošto smo uveli kašnjenje, sledeći prolazak kroz petlju se dešava tek nakon što se operacija spavanja završi.
Sada pokrenite delay_times.py
i pogledajte izlaz:
$ python3 delay_times.py
Reči iz niza će biti odštampane nakon odgovarajućeg kašnjenja. Kašnjenje nakon štampanja reči sa indeksom i
u nizu je broj na indeksu i
u listi delay_times
.
Tajmer za odbrojavanje u Python-u
Kao sledeći primer, napravićemo jednostavan tajmer za odbrojavanje u Python-u.
Definišimo funkciju countDown()
:
# /python-sleep/countdown.py
import time
def countDown(n):
for i in range(n,-1,-1):
if i==0:
print("Ready to go!")
else:
print(i)
time.sleep(1)
Razmotrimo definiciju funkcije countDown()
:
- Funkcija uzima broj
n
kao argument i odbrojava do nule počevši od tog brojan
. - Koristimo
time.sleep(1)
da postignemo kašnjenje od jedne sekunde između brojanja. - Kada broj dostigne 0, funkcija ispisuje „Ready to go!“.
🎯 Da bismo postigli operaciju odbrojavanja, koristili smo funkciju range()
sa negativnom vrednošću koraka od -1. range(n, -1, -1)
će nam pomoći da prođemo kroz opseg brojeva n
, n-1
, n-2
, i tako dalje do nule. Podsetimo se da je krajnja tačka po defaultu isključena kada se koristi funkcija range()
.
Zatim dodajmo poziv funkciji countDown()
sa 5 kao argumentom.
countDown(5)
Sada pokrenite skriptu countdown.py
i pogledajte funkciju countDown
u akciji!
$ python3 countdown.py
Funkcija spavanja u višenitnom radu
Python modul za obradu nitima nudi mogućnosti višenitnog rada. U Python-u, Globalno zaključavanje tumača ili GIL osigurava da postoji samo jedna aktivna nit u bilo kom trenutku.
Međutim, tokom I/O operacija i operacija čekanja kao što je spavanje, procesor može da suspenduje izvršenje trenutne niti i da se prebaci na drugu nit koja čeka.
Da bismo razumeli kako ovo funkcioniše, pogledajmo jedan primer.
Kreiranje i pokretanje niti u Python-u
Razmotrimo sledeće funkcije, func1()
, func2()
i func3()
. One prolaze kroz niz brojeva i štampaju ih. Ovo je praćeno operacijom spavanja – na određeni broj sekundi – tokom svakog prolaska kroz petlju. Koristili smo različita vremena kašnjenja za svaku od funkcija kako bismo bolje razumeli kako se izvršavanje prebacuje između niti.
import time
import threading
def func1():
for i in range(5):
print(f"Running t1, print {i}.")
time.sleep(2)
def func2():
for i in range(5):
print(f"Running t2, print {i}.")
time.sleep(1)
def func3():
for i in range(4):
print(f"Running t3, print {i}.")
time.sleep(0.5)
U Python-u, možete koristiti konstruktor Thread()
za instanciranje objekta niti. Koristeći sintaksu threading.Thread(target = ..., args = ...)
kreirate nit koja pokreće ciljnu funkciju sa argumentom navedenim u args
torki.
U ovom primeru, funkcije func1
, func2
i func3
ne uzimaju nikakve argumente. Dovoljno je navesti samo ime funkcije kao cilj. Zatim definišemo objekte niti, t1
, t2
i t3
sa func1
, func2
i func3
kao ciljevima, redom.
t1 = threading.Thread(target=func1)
t2 = threading.Thread(target=func2)
t3 = threading.Thread(target=func3)
t1.start()
t2.start()
t3.start()
Evo kompletnog koda za primer nitima:
# /python-sleep/threads.py
import time
import threading
def func1():
for i in range(5):
print(f"Running t1, print {i}.")
time.sleep(2)
def func2():
for i in range(5):
print(f"Running t2, print {i}.")
time.sleep(1)
def func3():
for i in range(4):
print(f"Running t3, print {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()
Pogledajte izlaz. Izvršenje se menja između tri niti. Nit t3
ima najkraće vreme čekanja, tako da je suspendovana najmanje vremena. Nit t1
ima najduže vreme mirovanja od dve sekunde, tako da je poslednja nit koja završava izvršenje.
Da biste saznali više, pročitajte tutorijal o osnovama višenitnog rada u Python-u.
Zaključak
U ovom tutorijalu ste naučili kako da koristite Python-ovu funkciju sleep()
da biste dodali vremenska kašnjenja kodu.
Možete pristupiti funkciji sleep()
iz ugrađenog modula time
, time.sleep()
. Da biste odložili izvršenje za n
sekundi, koristite time.sleep(n)
. Takođe, videli ste primere odlaganja sledećih iteracija u petlji za različite vrednosti, odbrojavanje i višenitnost.
Sada možete istražiti naprednije mogućnosti modula time
. Želite da radite sa datumima i vremenima u Python-u? Pored modula time
, možete iskoristiti funkcionalnost modula datetime
i calendar
.
Zatim, naučite kako da izračunate vremensku razliku u Python-u. ⏰