1. Schedule kitabxanasına giriş
Bu mühazirədə biz, əsl mexanizm ustaları kimi, tapşırıqları cədvələ uyğun başlatmağı öyrənəcəyik ki, kodumuz bizim istəyimizə uyğun işləsin. Hazır olun, bu gün biz zamanı ram edəcəyik!
schedule
kitabxanası — müəyyən edilmiş cədvələ uyğun funksiyaları başlatmaq üçün yüngül bir moduldur. Kodunuz müəyyən bir cədvələ uyğun işləməlidirsə, məsələn, hər gün saat 6-da məlumat toplamaq və ya gündəlik xatırlatmalar göndərmək lazımdırsa, schedule
sizin üçün idealdır.
schedule
kitabxanasının əsas üstünlükləri bunlardır:
- Sadəlik: intuitiv başa düşülən interfeys, standart
cron
və yathreading
həllərindən daha asandır. - Minimalizm: əlavə funksiyalar yoxdur - yalnız lazım olanlar.
- Aydınlıq: cədvəl qurmaq üçün təbii dilə yaxın bir üsul.
Kitabxananın quraşdırılması
İşə başlamaq üçün schedule
kitabxanasını quraşdırmaq lazımdır. Əksər Python kitabxanaları üçün olduğu kimi, burada da pip
-dən istifadə edirik:
pip install schedule
İndi hər şey hazırdır, gəlin avtomatlaşdırma dünyasına dalış edək və schedule
kitabxanasının gündəlik işlərinizi necə dəyişə biləcəyinə baxaq.
schedule
kitabxanasının əsas metodları
schedule
kitabxanası tapşırıqların müxtəlif vaxtlarda və fərqli tezliklərlə təyin edilməsi üçün metodlar təqdim edir:
every().day.at("HH:MM")
— tapşırığın hər gün müəyyən vaxtda icrası.every().hour
— tapşırığın hər saatda icrası.every().minute
— tapşırığın hər dəqiqədə icrası.every().week.at("HH:MM")
— tapşırığın hər həftə müəyyən vaxtda icrası.every().monday.at("HH:MM")
— tapşırığın hər bazar ertəsi müəyyən vaxtda icrası.every(10).seconds
— tapşırığın hər 10 saniyədə (və ya başqa bir zaman intervalında) icrası.
2. Təkrarlanan tapşırıqların tənzimlənməsi
Gəlin sadə bir şeydən başlayaq — hər saat icra ediləcək bir funksiyanı planlayaq. Biz salamlayıcı bir mesajı göstərən sadə bir funksiya yaradacağıq və onu cədvəl üzrə işə salacağıq.
Nümunə: hər saat salamlaşma
import schedule
import time
def say_hello():
print("Salam! Biz saatlıq avtomatlaşdırmada işləyirik.")
# say_hello funksiyasını hər saat işə salırıq
schedule.every().hour.do(say_hello)
while True:
# Vaxtı çatmış bütün tapşırıqları yerinə yetirir
schedule.run_pending()
time.sleep(1)
Bu qədər — sizin schedule
ilə ilk skriptiniz! Bu nümunədə biz every().hour.do(say_hello)
metodundan istifadə edirik ki, hər saat "Salam!" deyək. Maraqlıdı, düzdümü?
schedule.every().hour.do(say_hello)
komandası say_hello
funksiyasını icra etmir, əksinə onu cədvələ əlavə edir. Funksiyanın real çağırışı vaxtı çatanda baş verəcək — schedule.run_pending()
kodu vasitəsilə çağırılacaq.
3. Daha mürəkkəb interval konfiqurasiyası
Bəs əgər biz tapşırıqları yalnız hər saatda deyil, məsələn, hər 10 dəqiqədən bir və ya həftənin müəyyən günlərində işə salmaq istəyiriksə? schedule
kitabxanası ən çox yayılmış vaxt ifadələrini dəstəkləyir və siz onları çox böyük asanlıqla istifadə edə bilərsiniz.
Nümunə: tapşırığın hər 10 dəqiqədən bir işə salınması
import schedule
import time
def task():
print("Bu tapşırıq hər 10 dəqiqədən bir icra olunur.")
# Tapşırığın hər 10 dəqiqədən bir işə salınmasını planlaşdırırıq
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # Vaxtı yetişmiş bütün tapşırıqları işə salırıq
time.sleep(1)
Nümunə: tapşırığın müəyyən günlərdə işə salınması
İndi isə həftənin xüsusi günlərində, məsələn, bazar ertəsi və çərşənbə günləri, lakin yalnız səhər 9-da icra olunacaq tapşırığı planlaşdırmağa çalışaq.
import schedule
import time
def monday_wednesday_task():
print("Bu tapşırıq bazar ertəsi və çərşənbə günləri səhər 9-da icra olunur.")
# Tapşırığın bazar ertəsi və çərşənbə günləri səhər 9-da işə salınması
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)
Gördüyünüz kimi, schedule
kitabxanası müxtəlif vaxt ifadələrini, həftənin günlərini və işə salma vaxtını emal edir. Bu, işinizlə və ya planlaşdırılmış tədbirlərinizlə sinxronlaşdırılmış tapşırıqları planlaşdırmaq üçün inanılmaz dərəcədə əlverişlidir.
4. Müxtəlif vaxt şərtləri ilə tapşırıqların işlənməsi
Əgər skriptiniz bir neçə tapşırıq yerinə yetirirsə və onların hər birinin öz cədvəli varsa, schedule
bununla da asanlıqla öhdəsindən gələ bilər. Məsələn, bir tapşırıq hər səhər, digəri isə cümə günləri işə düşə bilər.
Nümunə: fərqli tapşırıqları bir skriptdə birləşdirmək
import schedule
import time
def morning_task():
print("Sabahınız xeyir! Səhər tapşırığı üçün vaxtdır.")
def friday_task():
print("Yaşasın, cümə! Cümə tapşırığı üçün vaxtdır.")
# Səhər tapşırıqları hər səhər saat 7:30-da
schedule.every().day.at("07:30").do(morning_task)
# Cümə tapşırıqları hər cümə saat 16:00-da
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
Təcrübə məsləhətləri və adi səhvlər
Təqdim olunan məsləhətləri nəzərə almaq çox vacibdir, əgər schedule
vasitəsi ilə tapşırıqları avtomatlaşdırmaq istəyirsinizsə.
Əvvəlcə yadda saxlayın ki, schedule
tapşırıqları əsas thread-də işə salır. Bu o deməkdir ki, əgər sizin tapşırıq uzun müddət alırsa və ya başqa tapşırıqların icrasını blok edə bilərsə, tapşırıqlar üçün multithreading və ya asinxron çağırışları düşünmək yaxşı olar.
İkincisi, əgər tapşırığınız dəqiq müəyyən edilmiş vaxtda icra olunmalıdır və bu kritikdirsə, əmin olun ki, cihazınız aktivdir və skript işləyir. Əgər skript dayandırılıb ya da cihaz sönüb, schedule
işləməyəcək.
Və nəhayət, ən yayılmış səhv — schedule
-dən itirilmiş tapşırıqları bərpa etməyi gözləməkdir. Təəssüf ki, əgər skriptiniz tapşırıq yerinə yetirilməli olanda işləmir idisə, schedule
onu keçmişdə yerinə yetirməyəcək.
GO TO FULL VERSION