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
cronlubthreading. - 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