1. Wprowadzenie do biblioteki schedule
W tym wykładzie, jak prawdziwe mechanizmy zegarowe, nauczymy się uruchamiać zadania według harmonogramu, aby nasz kod działał wtedy, kiedy tego chcemy. Przygotuj się, dziś oswoimy czas!
Biblioteka schedule
— to lekki moduł do uruchamiania funkcji w określonym harmonogramie.
Jeśli twój kod musi być wykonywany według określonego harmonogramu, na przykład, zbierać dane codziennie o 6
rano lub wysyłać codzienne przypomnienia, to schedule
— jest tym, czego potrzebujesz.
Oto główne zalety schedule
:
- Prostota: intuicyjny interfejs, który jest dużo prostszy w użyciu niż standardowe
rozwiązania poprzez
cron
lubthreading
. - Minimalizm: brak zbędnych funkcji — tylko te, które są potrzebne.
- Zrozumiałość: używanie niemal naturalnego języka do określania harmonogramu.
Instalacja biblioteki
Na początku pracy należy zainstalować bibliotekę schedule
. Jak w przypadku większości
bibliotek Python, korzystamy z pip
:
pip install schedule
Teraz, gdy wszystko jest gotowe, zanurzmy się w świat automatyzacji i zobaczmy, jak schedule
może
zmienić twoją codzienną pracę.
Główne metody biblioteki schedule
Biblioteka schedule
dostarcza metody do ustawiania zadań na różne czasy i z różną częstotliwością
wykonywania:
every().day.at("HH:MM")
— wykonanie zadania każdego dnia o określonej godzinie.every().hour
— wykonanie zadania co godzinę.every().minute
— wykonanie zadania co minutę.every().week.at("HH:MM")
— wykonanie zadania raz w tygodniu o określonym czasie.every().monday.at("HH:MM")
— wykonanie zadania w poniedziałki o określonym czasie.every(10).seconds
— wykonanie zadania co 10 sekund (lub dowolny inny okres czasu).
2. Ustawienia cyklicznych zadań
Zacznijmy od czegoś prostego — zaplanujmy funkcję, która będzie wykonywana co godzinę. Stworzymy prostą funkcję, która wypisuje powitanie i uruchomimy ją według harmonogramu.
Przykład: powitanie co godzinę
import schedule
import time
def say_hello():
print("Cześć! Pracujemy w automatyzacji godzinnej.")
# Uruchamiamy funkcję say_hello co godzinę
schedule.every().hour.do(say_hello)
while True:
# Wykonuje wszystkie zadania, których czas nadszedł
schedule.run_pending()
time.sleep(1)
Ot i wszystko — twój pierwszy skrypt z schedule
! W tym przykładzie używamy metody
every().hour.do(say_hello)
, aby mówić "Cześć!" co godzinę. Ciekawe, prawda?
Komenda schedule.every().hour.do(say_hello)
nie wykonuje funkcji say_hello
, a
dodaje jej wywołanie do harmonogramu. Faktyczne wywołanie funkcji nastąpi, gdy nadejdzie jej czas - zostanie wywołana za pomocą kodu schedule.run_pending()
.
3. Ustawienie bardziej skomplikowanych interwałów
A co, jeśli chcemy uruchamiać zadania nie tylko co godzinę, ale na przykład co 10 minut lub w określone dni
tygodnia? schedule
obsługuje większość popularnych wyrażeń czasowych i możesz
używać ich z równie dużą łatwością.
Przykład: uruchamianie zadania co 10 minut
import schedule
import time
def task():
print("To zadanie jest wykonywane co 10 minut.")
# Zaplanujmy uruchamianie zadania co 10 minut
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # Wywołujemy wszystkie zadania, których czas nadszedł
time.sleep(1)
Przykład: uruchamianie zadania w określone dni
A teraz spróbujmy zaplanować zadanie, które będzie wykonywane w określone dni tygodnia, na przykład w poniedziałki i środy, ale tylko o 9 rano.
import schedule
import time
def monday_wednesday_task():
print("To zadanie jest wykonywane w poniedziałki i środy o 9 rano.")
# Uruchamianie zadania w poniedziałki i środy o 9 rano
schedule.every().monday.at("09:00").do(monday_wednesday_task)
schedule.every().wednesday.at("09:00").do(monday_wednesday_task)
while True:
schedule.run_pending()
time.sleep(1)
Jak widzisz, schedule
obsługuje różne wyrażenia czasowe, w tym dni tygodnia i dokładny czas
uruchamiania. To niezwykle wygodne dla planowania zadań zsynchronizowanych z twoją pracą lub zaplanowanymi
wydarzeniami.
4. Obsługa zadań z różnymi warunkami czasowymi
Jeśli twój skrypt wykonuje kilka zadań, a każde z nich ma swój harmonogram, schedule
łatwo
sobie z tym poradzi. Na przykład jedno zadanie może być uruchamiane każdego ranka, a inne — w piątki.
Przykład: łączenie różnych zadań w jednym skrypcie
import schedule
import time
def morning_task():
print("Dzień dobry! Czas na poranne zadanie.")
def friday_task():
print("Hurra, piątek! Czas na piątkowe zadanie.")
# Zadania poranne każdego ranka o 7:30
schedule.every().day.at("07:30").do(morning_task)
# Zadania piątkowe każdego piątku o 16:00
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
Praktyczne wskazówki i typowe błędy
Kiedy dochodzi do automatyzacji zadań za pomocą schedule
, jest kilka aspektów, na które
warto zwrócić uwagę.
Po pierwsze, pamiętaj, że schedule
uruchamia zadania w głównym wątku. Oznacza to, że jeśli twoje
zadanie jest długotrwałe lub może zablokować wykonywanie innych zadań, warto pomyśleć o używaniu
wielowątkowości lub wywołań asynchronicznych dla zadań.
Po drugie, jeśli twoje zadanie musi być wykonywane w ściśle określonym czasie i jest to krytyczne, upewnij się, że twój
sprzęt jest włączony, a skrypt działa. schedule
nie będzie działać, jeśli skrypt zostanie
zatrzymany lub urządzenie wyłączone.
I na koniec, najbardziej powszechne nieporozumienie — oczekiwanie, że schedule
może
kompensować przegapione zadania. Niestety, jeśli twój skrypt nie działał, gdy zadanie powinno było zostać wykonane,
schedule
nie wykona go wstecz.
GO TO FULL VERSION