Tasks Scheduler dengan Celery Beat

Subscribe Dengan Account Google Untuk Membaca Artikel Tanpa Iklan
Tasks Scheduler dengan Celery Beat

Pada artikel sebelumnya kita telah banyak membahas tentang Django, Celery, Redis


Celery beat adalah sebuah scheduler. Celery beat memulai tugas secara berkala, kemudian dieksekusi oleh worker yang tersedia di cluster.

Secara default, entri diambil dari pengaturan beat_schedule, tetapi custom store juga dapat digunakan seperti menyimpan entri dalam Database SQL. Dalam hal ini kamu harus bisa memastikan hanya ada satu penjadwalan dalam satu waktu. Jika tidak, akan terdapat duplikasi task.

Time Zones


Periodic task scheduler secara default menggunakan zona waktu UTC, tetapi kamu bisa mengubah zona waktu kedalam zona waktu lokal menyesuaikan region dimana kamu tinggal. tambahkan pengaturan zona waktu di pada django settings.py sebagai berikut :
timezone = "Asia/Jakarta"

Default scheduler (menyimpan schedule di file celerybeat-schedule) secara otomatis akan mendeteksi bahwa zona waktu telah berubah, dan juga akan mengubah jadwal itu sendiri.

Task Schedule


Untuk memanggil task periodic kamu harus menambahkan task kedalam beat schedule.

Buat sebuah function dengan nama broadcast_email, simpan di file task.py yang sudah di buat di tutorial sebelumnya : Asynchronous task dengan django dan celery. perhatikan kode di bawah ini

@shared_task
def broadcast_email():
logger.info("news letter has send")

 

Tambahkan CELERY_BEAT_SCHEDULE pada django settings.py, perhatikan kode di bawah ini :

CELERY_BEAT_SCHEDULE = {
'broadcast_email': {
'task': 'schedules.task.broadcast_email',
'schedule': crontab(hour=7, minute=30, day_of_week='monday')
},
}

 

Sintaks dari ekspresi Crontab ini sangat flexible. perhatikan sample di bawah ini

crontab() : execute setiap menit

crontab(minute=0, hour=0) : execute setiap hari pada tengah malam

crontab(minute=0, hour='*/3') : execute setiap tiga jam

crontab(minute=0,hour='0,3,6,9,12,15,18,21') : execute setiap tiga jam

crontab(minute='*/15') : execute setiap 15 menit

crontab(day_of_week='sunday') :  execute setiap menit pada hari minggu

crontab(minute='*',hour='*',day_of_week='sun') : execute setiap menit pada hari minggu

crontab(minute='*/10',hour='3,17,22', day_of_week='thu,fri') : execute setiap 10 menit setiap antara jam 3-4, 5-6, 10-11

crontab(minute=0, hour='*/2,*/3') : execute setiap jam habis di bagi 2 dan 3 kecuali jam 1, 5, 7, 11 (am dan pm)

crontab(minute=0, hour='*/5') : execute setiap jam habis di bagi 5

crontab(minute=0, hour='*/3,8-17') :  execute setiap jam habis dibagi 3 dan setiap jam antara jam 8 pagi sampai jam 5 sore

crontab(0, 0, day_of_month='2') : execute setiap bulan pada hari ke-2

crontab(0, 0,day_of_month='2-30/2') : execute pada setiap hari genap

crontab(0, 0,day_of_month='1-7,15-21') : execute setiap minggu pertama dan ketiga tiap bulan

crontab(0, 0, day_of_month='11',month_of_year='5') : execute setiap tanggal 11 mei tiap tahun

crontab(0, 0,month_of_year='*/3') : execute setiap hari pada bulan pertama setiap kuartal

baca artikel lainya :


Execute Celery Beat


buka command line baru, dan jalankan kode berikut:

celery -A firstproject beat -l info



selesai sudah sesi belajar kita tentang Task Scheduler dengan Django Celery Redis

download full source