1. Sadə bir tapşırığın quraşdırılması
import schedule
import time
def job():
print("Xatırlatma: Zəhmət olmasa poçtunuzu yoxlayın!")
# Tapşırığın hər gün işə salınmasını qururuq
schedule.every().day.at("09:00").do(job)
while True:
schedule.run_pending()
time.sleep(1)
Bu nümunədə job
funksiyası hər gün səhər saat 9-da çağırılacaq. schedule
kitabxanası hər 1 saniyədən bir run_pending()
istifadə edərək planlaşdırılan tapşırıqların olub-olmadığını yoxlayır. Unutmayın ki, tapşırığın yerinə yetirilməsi üçün kodunuz daim işləməlidir.
Maraqlı hakerlər üçün qeydlər
Qeyd edin ki, every().hour
istifadə edərək tapşırığı hər saatda və ya every(2).hours
istifadə edərək hər iki saatda bir işə sala bilərsiniz. İmkanlar demək olar ki, sonsuzdur.
2. İş günlərində xatırlatmalar
İndi vəziyyəti bir az mürəkkəbləşdirək: təsəvvür edək ki, sizə xatırlatma yalnız iş günlərində lazımdır. Məsələn, hər iş günü eyni xatırlatmanı almaq istəyirik.
import schedule
import time
def weekday_job():
print("İş xatırlatması: hesabatı hazırlamağı unutmayın!")
schedule.every().monday.at("08:00").do(weekday_job)
schedule.every().tuesday.at("08:00").do(weekday_job)
schedule.every().wednesday.at("08:00").do(weekday_job)
schedule.every().thursday.at("08:00").do(weekday_job)
schedule.every().friday.at("08:00").do(weekday_job)
while True:
schedule.run_pending()
time.sleep(1)
Bu halda, hər iş günü səhər saat 8-də sizə hesabat hazırlamaq barədə xatırlatma veriləcək. Beləliklə, skriptiniz həmişə qrafiki izləyəcək, hətta siz bunu unutduğunuzda belə.
3. Həftəlik tapşırıqların qurulması
Bəs hər bazar günü xatırlatma almaq istəyirsinizsə nə etməlisiniz? Deyək ki, siz iş həftəsindən əvvəl kofe ehtiyatlarını yoxlamaq istəyirsiniz. Gəlin bunun necə edildiyini öyrənək:
import schedule
import time
def sunday_job():
print("Xatırlatma: Növbəti həftə üçün kofe ehtiyatlarını yoxlayın!")
schedule.every().sunday.at("18:00").do(sunday_job)
while True:
schedule.run_pending()
time.sleep(1)
Bu kiçik kod parçası bazar gününüzü bir az da nizama salacaq və növbəti həftəyə hazırlaşmağı xatırladacaq. İndi kofe ehtiyatları ən gözlənilməz anda tükənməyəcək. Bəli, bilirəm ki, bu, bir çoxları üçün faciə ola bilər.
4. Tapşırıqların dəyişdirilməsi
Tapşırıqların cədvəldən silinməsi
Tapşırığı ləğv etmək lazımdırsa, cancel_job()
metodundan istifadə edə bilərsiniz. Məsələn, tapşırığı cədvəldən çıxarmaq üçün tapşırıq obyektini alıb onun üçün cancel_job()
metodunu çağırmaq olar.
job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job) # Tapşırığı cədvəldən silirik
Tapşırığın vaxtını dəyişmək
Tapşırığın yerinə yetirilmə vaxtını dəyişdirmək üçün təkrar cədvəl təyin etmək olar. Məsələn, əgər tapşırıq saat 9:00-a planlaşdırılmış idisə, amma indi onu 10:00-a keçirmək lazımdırsa, cədvəlini yenidən yaza bilərik.
# Tapşırığı hər gün 9:00-a planlaşdırırıq
job = schedule.every().day.at("09:00").do(my_task)
# Tapşırığı 10:00-a keçiririk
job.clear() # Tapşırığın cari cədvəlini təmizləyirik
job.at("10:00") # Yeni vaxta keçiririk
Aktiv tapşırıqların yoxlanılması
Cədvəldə planlaşdırılmış tapşırıqların olub-olmadığını bilmək üçün schedule.jobs
vasitəsilə bütün aktiv tapşırıqların siyahısını ekrana çıxarmaq olar. Bu, cədvəldə olan bütün tapşırıqlar barədə məlumat almaq üçün faydalıdır.
# Bir neçə tapşırıq əlavə edirik
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)
# Bütün aktiv tapşırıqlara baxış
for job in schedule.jobs:
print("Tapşırıq:", job)
Bütün tapşırıqların cədvəldən silinməsi
Cədvəli təmizləmək və bütün planlaşdırılmış tapşırıqları silmək üçün clear()
metodundan istifadə etmək olar.
# Bir neçə tapşırıq planlaşdırırıq
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)
# Cədvəlin təmizlənməsi
schedule.clear()
Tapşırığın yalnız bir dəfə yerinə yetirilməsi
Bəzən tapşırıq yalnız bir dəfə müəyyən vaxta yerinə yetirilməlidir. Belə tapşırıq yerinə yetirildikdən sonra schedule.cancel_job(job)
metodundan istifadə edərək onu ləğv etmək olar.
def one_time_task():
print("Tapşırıq bir dəfə yerinə yetirildi")
return schedule.CancelJob # Tapşırıq yerinə yetirildikdən sonra ləğv edilir
# Tapşırığı yalnız bir dəfə yerinə yetirilməsi üçün planlaşdırırıq
schedule.every().day.at("09:00").do(one_time_task)
while True:
schedule.run_pending()
time.sleep(1)
5. Real istifadə ssenariləri
İndi bir az ciddi olaq: bu cür avtomatizasiyalar peşəkar mühitdə necə tətbiq olunur? Real həyatda tapşırıqların planlaşdırılmasını aşağıdakılar üçün istifadə edə bilərsiniz:
- Hər gün və ya hər həftə avtomatik məlumatların toplanması.
- Hesabatların müəyyən gün və saatda yaradılması və göndərilməsi.
- Serverinizin və ya veb-interfeysinizin vəziyyətinin izlənməsi və xətalar haqqında xəbərdarlıqlar.
- Məlumat bazasının müntəzəm backup-larının başladılması.
Tipik səhvlər
Tapşırıqları planlaşdırarkən vaxt sinxronizasiyasına diqqətli olun, məsələn, əgər serveriniz və lokal kompüteriniz fərqli vaxt zonalarındadırsa. Həmçinin, əgər skriptiniz təsadüfən dayanırsa, planlaşdırılmış tapşırıq yerinə yetirilməyəcək. Monitoring alətlərindən istifadə edin, məsələn, cron (Unix-oxşar sistemlər üçün) və ya Windows Task Scheduler.
Əgər təsadüfən time.sleep(1)
kodunu dövrənin sonunda qoymağı unutsanız, prosessoru dayanmadan yükləyən və hiperaktiv bir kod yaradan proses əldə edəcəksiniz. Ümumilikdə, skripti işlək vəziyyətdə saxlamağı unutmayın.
GO TO FULL VERSION