إصدار: | 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 Admin، حيث يمكنك إنشاء وتحرير وحذف المهام الدورية وعدد مرات تشغيلها.
تتوفر تعليمات الاستخدام والتثبيت لهذا الملحق من وثائق الكرفس.
تحذير
إذا قمت بتغيير إعداد 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 ثوانٍ، فيجب أن تشير جميعها إلى نفس كائن الجدول الزمني.
هناك أيضًا "صف اختيارات" متاح إذا كنت بحاجة إلى تقديم ذلك للمستخدم:
>> > 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)
يجب أن يتم تشغيل كل من خدمات العامل والإيقاع في نفس الوقت.
ابدأ خدمة عامل الكرفس (حدد اسم مشروع Django الخاص بك):
$ الكرفس - عامل [اسم المشروع] --loglevel=info
كعملية منفصلة، ابدأ خدمة الإيقاع (حدد جدولة Django):
$ الكرفس -A [اسم المشروع] فاز -l معلومات --جدول django_celery_beat.schedulers:DatabaseScheduler
أو يمكنك استخدام -S (علامة الجدولة)، لمزيد من الخيارات، راجع celery beat --help
):
$ الكرفس -A [اسم المشروع] فاز -l info -S django
أيضًا، كبديل، يمكنك تشغيل الخطوتين أعلاه (خدمات العامل والتغلب) باستخدام أمر واحد فقط (موصى به لبيئة التطوير فقط ):
$ الكرفس - عامل [اسم المشروع] --beat --Scheduler Django --loglevel=info
يمكنك الآن إضافة مهامك الدورية وإدارتها من واجهة Django Admin.
يمكنك تثبيت 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 install git+https://github.com/celery/django-celery-beat#egg=django-celery-beat
لتدوير نسخة تطوير محلية من Django-celery-beat مع مسؤول Django على http://127.0.0.1:58000/admin/ قم بتشغيل:
$ docker-compose up --build
قم بتسجيل الدخول admin
المستخدم بكلمة المرور admin
.
إذا كان لديك مشروع غير منطقة زمنية، فيمكنك تعيين DJANGO_CELERY_BEAT_TZ_AWARE=False
في ملف الإعدادات الخاص بك.
يعمل القائمون على صيانة Django-celery-beat وآلاف الحزم الأخرى مع Tidelift لتقديم الدعم التجاري والصيانة للتبعيات مفتوحة المصدر التي تستخدمها لبناء تطبيقاتك. يمكنك توفير الوقت وتقليل المخاطر وتحسين سلامة التعليمات البرمجية، مع الدفع لمشرفي التبعيات الدقيقة التي تستخدمها. يتعلم أكثر.