เวอร์ชัน: | 2.7.0 |
---|---|
เว็บ: | http://django-celery-beat.readthedocs.io/ |
ดาวน์โหลด: | http://pypi.python.org/pypi/django-celery-beat |
แหล่งที่มา: | http://github.com/celery/django-celery-beat |
คำสำคัญ: | django, คื่นฉ่าย, จังหวะ, งานเป็นระยะ, cron, การตั้งเวลา |
ส่วนขยายนี้ช่วยให้คุณสามารถจัดเก็บกำหนดการงานเป็นระยะในฐานข้อมูล
คุณสามารถจัดการงานตามกำหนดเวลาได้จากอินเทอร์เฟซผู้ดูแลระบบ Django ซึ่งคุณสามารถสร้าง แก้ไข และลบงานตามกำหนดเวลา รวมถึงความถี่ที่ควรรัน
คำแนะนำการใช้งานและการติดตั้งสำหรับส่วนขยายนี้มีอยู่ในเอกสารของ Celery
คำเตือน
หากคุณเปลี่ยนการตั้งค่า Django TIME_ZONE
กำหนดการงานตามระยะเวลาของคุณจะยังคงยึดตามเขตเวลาเก่า
หากต้องการแก้ไขคุณจะต้องรีเซ็ต "เวลาทำงานล่าสุด" สำหรับแต่ละงานเป็นระยะ:
>> > from django_celery_beat . models import PeriodicTask , PeriodicTasks
>> > PeriodicTask . objects . all (). update ( last_run_at = None )
>> > PeriodicTasks . update_changed ()
บันทึก
การดำเนินการนี้จะรีเซ็ตสถานะราวกับว่างานตามงวดไม่เคยทำงานมาก่อน
django_celery_beat.models.PeriodicTask
แบบจำลองนี้กำหนดงานเป็นระยะเดียวที่จะรัน
จะต้องเชื่อมโยงกับกำหนดการ ซึ่งกำหนดความถี่ที่งานควรรัน
django_celery_beat.models.IntervalSchedule
ตารางเวลาที่ทำงานในช่วงเวลาที่กำหนด (เช่น ทุก 5 วินาที)
django_celery_beat.models.CrontabSchedule
กำหนดการที่มีฟิลด์เช่นรายการใน cron: minute hour day-of-week day_of_month month_of_year
django_celery_beat.models.PeriodicTasks
โมเดลนี้ใช้เป็นดัชนีเพื่อติดตามเมื่อกำหนดการมีการเปลี่ยนแปลงเท่านั้น
เมื่อใดก็ตามที่คุณอัปเดต PeriodicTask
ตัวนับในตารางนี้จะเพิ่มขึ้นด้วย ซึ่งจะบอกให้บริการ celery beat
โหลดกำหนดการจากฐานข้อมูลอีกครั้ง
หากคุณอัปเดตงานเป็นระยะจำนวนมาก คุณจะต้องอัปเดตตัวนับด้วยตนเอง:
>> > from django_celery_beat . models import PeriodicTasks
>> > PeriodicTasks . update_changed ()
หากต้องการสร้างงานเป็นระยะที่ดำเนินการตามช่วงเวลา คุณต้องสร้างอ็อบเจ็กต์ช่วงเวลาก่อน:
>> > from django_celery_beat . models import PeriodicTask , IntervalSchedule
# executes every 10 seconds.
>> > schedule , created = IntervalSchedule . objects . get_or_create (
... every = 10 ,
... period = IntervalSchedule . SECONDS ,
... )
นั่นคือฟิลด์ทั้งหมดที่คุณต้องการ: ประเภทช่วงเวลาและความถี่
คุณสามารถเลือกระหว่างชุดช่วงเวลาที่เฉพาะเจาะจงได้:
IntervalSchedule.DAYS
IntervalSchedule.HOURS
IntervalSchedule.MINUTES
IntervalSchedule.SECONDS
IntervalSchedule.MICROSECONDS
บันทึก
หากคุณมีงานเป็นระยะหลายงานที่ดำเนินการทุกๆ 10 วินาที งานเหล่านั้นควรชี้ไปที่ออบเจ็กต์กำหนดการเดียวกัน
นอกจากนี้ยังมี "tuple ตัวเลือก" หากคุณต้องการนำเสนอสิ่งนี้ต่อผู้ใช้:
>> > IntervalSchedule . PERIOD_CHOICES
ตอนนี้เราได้กำหนดวัตถุกำหนดการแล้ว เราสามารถสร้างรายการงานตามระยะเวลาได้:
>> > PeriodicTask . objects . create (
... interval = schedule , # we created this above.
... name = 'Importing contacts' , # simply describes this periodic task.
... task = 'proj.tasks.import_contacts' , # name of task.
... )
โปรดทราบว่านี่เป็นตัวอย่างพื้นฐาน คุณยังสามารถระบุอาร์กิวเมนต์และอาร์กิวเมนต์คำหลักที่ใช้ในการดำเนินการงาน queue
ที่จะส่งไปที่ [*] และตั้งเวลาหมดอายุได้
ต่อไปนี้คือตัวอย่างที่ระบุอาร์กิวเมนต์ โปรดทราบว่าจำเป็นต้องมีการทำให้เป็นอนุกรม JSON อย่างไร:
>> > import json
>> > from datetime import datetime , timedelta
>> > PeriodicTask . objects . create (
... interval = schedule , # we created this above.
... name = 'Importing contacts' , # simply describes this periodic task.
... task = 'proj.tasks.import_contacts' , # name of task.
... args = json . dumps ([ 'arg1' , 'arg2' ]),
... kwargs = json . dumps ({
... 'be_careful' : True ,
... }),
... expires = datetime . utcnow () + timedelta ( seconds = 30 )
... )
- | คุณยังสามารถใช้การกำหนดเส้นทาง AMQP ระดับต่ำโดยใช้ฟิลด์ exchange และ routing_key |
ตาราง crontab มีฟิลด์: minute
, hour
, day_of_week
, day_of_month
และ month_of_year
ดังนั้นหากคุณต้องการเทียบเท่ากับ 30 * * * *
(ดำเนินการ 30 นาทีที่ผ่านมาทุก ๆ ชั่วโมง) รายการ crontab ที่คุณระบุ:
>> > from django_celery_beat . models import CrontabSchedule , PeriodicTask
>> > schedule , _ = CrontabSchedule . objects . get_or_create (
... minute = '30' ,
... hour = '*' ,
... day_of_week = '*' ,
... day_of_month = '*' ,
... month_of_year = '*' ,
... timezone = zoneinfo . ZoneInfo ( 'Canada/Pacific' )
... )
ตาราง crontab เชื่อมโยงกับเขตเวลาเฉพาะโดยใช้พารามิเตอร์อินพุต 'เขตเวลา'
จากนั้น หากต้องการสร้างงานตามช่วงเวลาโดยใช้กำหนดการนี้ ให้ใช้วิธีการเดียวกันกับงานตามช่วงเวลาก่อนหน้านี้ในเอกสารนี้ แต่แทนที่จะระบุ interval=schedule
ให้ระบุ crontab=schedule
:
>> > PeriodicTask . objects . create (
... crontab = schedule ,
... name = 'Importing contacts' ,
... task = 'proj.tasks.import_contacts' ,
... )
คุณสามารถใช้แฟล็ก enabled
เพื่อปิดใช้งานงานเป็นระยะชั่วคราว:
>> > periodic_task . enabled = False
>> > periodic_task . save ()
งานตามระยะเวลายังคงต้องใช้ "พนักงาน" ในการดำเนินการ ดังนั้นตรวจสอบให้แน่ใจว่าได้ติดตั้งแพ็คเกจ Celery เริ่มต้นแล้ว (หากไม่ได้ติดตั้ง โปรดปฏิบัติตามคำแนะนำการติดตั้งที่นี่: https://github.com/celery/celery)
ทั้งบริการผู้ปฏิบัติงานและบริการบีทจำเป็นต้องทำงานพร้อมกัน
เริ่มบริการผู้ปฏิบัติงาน Celery (ระบุชื่อโครงการ Django ของคุณ):
$ คื่นฉ่าย -A [ชื่อโครงการ] ผู้ปฏิบัติงาน --loglevel=info
เป็นกระบวนการแยกต่างหาก ให้เริ่มบริการบีท (ระบุตัวกำหนดเวลา Django):
$ คื่นฉ่าย -A [ชื่อโครงการ] จังหวะ -l ข้อมูล --scheduler django_celery_beat.schedulers:DatabaseScheduler
หรือ คุณสามารถใช้ -S (แฟล็กกำหนดการ) สำหรับตัวเลือกเพิ่มเติมโปรดดู celery beat --help
):
$ คื่นฉ่าย -A [ชื่อโครงการ] จังหวะ -l ข้อมูล -S django
นอกจากนี้ คุณสามารถรันสองขั้นตอนข้างต้นได้ (บริการผู้ปฏิบัติงานและบีท) ด้วยคำสั่งเดียวเท่านั้น (แนะนำสำหรับ สภาพแวดล้อมการพัฒนาเท่านั้น ):
$ คื่นฉ่าย -A [ชื่อโครงการ] ผู้ปฏิบัติงาน --beat --scheduler django --loglevel=info
ตอนนี้คุณสามารถเพิ่มและจัดการงานตามกำหนดเวลาได้จากอินเทอร์เฟซผู้ดูแลระบบ Django
คุณสามารถติดตั้ง django-celery-beat ผ่าน Python Package Index (PyPI) หรือจากแหล่งที่มา
วิธีติดตั้งโดยใช้ pip
:
$ pip install --upgrade django-celery-beat
ดาวน์โหลด django-celery-beat เวอร์ชันล่าสุดจากhttp://pypi.python.org/pypi/django-celery-beat
คุณสามารถติดตั้งได้โดยทำดังนี้:
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install --upgrade build pip
$ tar xvfz django-celery-beat-0.0.0.tar.gz
$ cd django-celery-beat-0.0.0
$ python -m build
$ pip install --upgrade .
หลังการติดตั้ง ให้เพิ่ม django_celery_beat
ลงในโมดูลการตั้งค่าของ Django:
INSTALLED_APPS = [
...,
'django_celery_beat' ,
]
รันการโยกย้าย django_celery_beat
โดยใช้:
$ python manage.py migrate django_celery_beat
คุณสามารถติดตั้ง django-celery-beat เวอร์ชันหลักล่าสุดได้โดยใช้คำสั่ง pip ต่อไปนี้:
$ pip install git+https://github.com/celery/django-celery-beat#egg=django-celery-beat
หากต้องการหมุนสำเนาการพัฒนาท้องถิ่นของ django-celery-beat กับผู้ดูแลระบบ Django ที่ http://127.0.0.1:58000/admin/ run:
$ docker-compose up --build
เข้าสู่ระบบในฐานะ admin
ระบบด้วยรหัสผ่าน admin
ระบบ
หากคุณมีโปรเจ็กต์ที่เป็นเขตเวลาไร้เดียงสา คุณสามารถตั้งค่า DJANGO_CELERY_BEAT_TZ_AWARE=False
ในไฟล์การตั้งค่าของคุณได้
ผู้ดูแล django-celery-beat และแพ็คเกจอื่นๆ หลายพันรายการกำลังทำงานร่วมกับ Tidelift เพื่อให้การสนับสนุนเชิงพาณิชย์และการบำรุงรักษาสำหรับการพึ่งพาโอเพ่นซอร์สที่คุณใช้ในการสร้างแอปพลิเคชันของคุณ ประหยัดเวลา ลดความเสี่ยง และปรับปรุงประสิทธิภาพของโค้ด ในขณะเดียวกันก็จ่ายค่าตอบแทนให้กับผู้ดูแลตามที่คุณใช้ เรียนรู้เพิ่มเติม