All Projects → celery → Django Celery Beat

celery / Django Celery Beat

Licence: other
Celery Periodic Tasks backed by the Django ORM

Programming Languages

python
139335 projects - #7 most used programming language
python3
1442 projects
python2
120 projects

Projects that are alternatives of or similar to Django Celery Beat

Dailyfresh B2c
dailyfresh mall based on B2C model
Stars: ✭ 177 (-79.98%)
Mutual labels:  django, celery
Chain
链喵 CMDB 本项目已停止开发!因长时间未对代码进行维护,可能会造成项目在不同环境上无法部署、运行BUG等问题,请知晓!项目仅供参考!
Stars: ✭ 240 (-72.85%)
Mutual labels:  django, celery
Website
django 开发的BBS博客项目, 此项目包含多用户注册,话题模块,发布文章,文章评论,课程、社区BBS以及消息提示,关注,采用邮箱注册,激活验证登录,以及QQ注册登录,招募作者发布教程在后台管理系统发布, pc采用模板渲染,cms采用vue drf前后分离,登录采用JWT认证登录、移动端采用react开发,
Stars: ✭ 217 (-75.45%)
Mutual labels:  django, celery
Django School Management
Deployment Ready Developer to Developer Full-stack School Management System with payments, e-admission, result management, academic functionalities, and much more implemented in a simple way.
Stars: ✭ 151 (-82.92%)
Mutual labels:  django, celery
Autoops
linux资产管理,cmdb,django, webssh,运维管理平台,数据库操作平台 本项目已停止开发!因长时间未对代码进行维护,可能会造成项目在不同环境上无法部署、运行BUG等问题,请知晓!项目仅供参考!
Stars: ✭ 340 (-61.54%)
Mutual labels:  django, celery
Django Guid
Inject an ID into every log message from a Django request. ASGI compatible, integrates with Sentry, and works with Celery
Stars: ✭ 166 (-81.22%)
Mutual labels:  django, celery
Celery Progress
Drop in, configurable, dependency-free progress bars for your Django/Celery applications.
Stars: ✭ 230 (-73.98%)
Mutual labels:  django, celery
Django Celery
Old Celery integration project for Django
Stars: ✭ 1,439 (+62.78%)
Mutual labels:  django, celery
Django Celery Results
Celery result back end with django
Stars: ✭ 337 (-61.88%)
Mutual labels:  django, celery
Letsmapyournetwork
Lets Map Your Network enables you to visualise your physical network in form of graph with zero manual error
Stars: ✭ 305 (-65.5%)
Mutual labels:  django, celery
Django Celery Docker Example
Example Docker setup for a Django app behind an Nginx proxy with Celery workers
Stars: ✭ 149 (-83.14%)
Mutual labels:  django, celery
Docker Django
A complete docker package for deploying django which is easy to understand and deploy anywhere.
Stars: ✭ 378 (-57.24%)
Mutual labels:  django, celery
Dailyfresh
Django-天天生鲜电商学习项目
Stars: ✭ 127 (-85.63%)
Mutual labels:  django, celery
Django Pushy
Your push notifications handled at scale.
Stars: ✭ 168 (-81%)
Mutual labels:  django, celery
Django Structlog
Structured Logging for Django
Stars: ✭ 127 (-85.63%)
Mutual labels:  django, celery
Opensa
资产管理、资产采集、灰度发布、反向代理、批量任务、任务编排、计划任务、日志审计、权限管理、角色管理、部门管理、运维自动化
Stars: ✭ 220 (-75.11%)
Mutual labels:  django, celery
Playlistor
🎶Apple Music ↔️ Spotify playlist convertor.
Stars: ✭ 95 (-89.25%)
Mutual labels:  django, celery
Banking System
A banking System Created Using Django Python Web Framework
Stars: ✭ 105 (-88.12%)
Mutual labels:  django, celery
Ecommerce website development
本项目基于Django1.8.2等来开发一个电商平台,可实现注册、登录、浏览、购买、支付等全部常用功能。
Stars: ✭ 246 (-72.17%)
Mutual labels:  django, celery
Django Celery Email
A Django email backend that uses a celery task for sending the email.
Stars: ✭ 351 (-60.29%)
Mutual labels:  django, celery

===================================================================== Database-backed Periodic Tasks

|build-status| |coverage| |license| |wheel| |pyversion| |pyimp|

:Version: 2.2.0 :Web: http://django-celery-beat.readthedocs.io/ :Download: http://pypi.python.org/pypi/django-celery-beat :Source: http://github.com/celery/django-celery-beat :Keywords: django, celery, beat, periodic task, cron, scheduling

About

This extension enables you to store the periodic task schedule in the database.

The periodic tasks can be managed from the Django Admin interface, where you can create, edit and delete periodic tasks and how often they should run.

Using the Extension

Usage and installation instructions for this extension are available from the Celery documentation_.

.. _Celery documentation: http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#using-custom-scheduler-classes

Important Warning about Time Zones

.. warning:: If you change the Django TIME_ZONE setting your periodic task schedule will still be based on the old timezone.

To fix that you would have to reset the "last run time" for each periodic task:

.. code-block:: Python

    >>> from django_celery_beat.models import PeriodicTask, PeriodicTasks
    >>> PeriodicTask.objects.all().update(last_run_at=None)
    >>> for task in PeriodicTask.objects.all():
    >>>     PeriodicTasks.changed(task)

.. note:: This will reset the state as if the periodic tasks have never run before.

Models

  • django_celery_beat.models.PeriodicTask

This model defines a single periodic task to be run.

It must be associated with a schedule, which defines how often the task should run.

  • django_celery_beat.models.IntervalSchedule

A schedule that runs at a specific interval (e.g. every 5 seconds).

  • django_celery_beat.models.CrontabSchedule

A schedule with fields like entries in cron: minute hour day-of-week day_of_month month_of_year.

  • django_celery_beat.models.PeriodicTasks

This model is only used as an index to keep track of when the schedule has changed.

Whenever you update a PeriodicTask a counter in this table is also incremented, which tells the celery beat service to reload the schedule from the database.

If you update periodic tasks in bulk, you will need to update the counter manually:

.. code-block:: Python

    >>> from django_celery_beat.models import PeriodicTasks
    >>> PeriodicTasks.update_changed()

Example creating interval-based periodic task

To create a periodic task executing at an interval you must first create the interval object:

.. code-block:: Python

    >>> from django_celery_beat.models import PeriodicTask, IntervalSchedule
    
    # executes every 10 seconds.
    >>> schedule, created = IntervalSchedule.objects.get_or_create(
    ...     every=10,
    ...     period=IntervalSchedule.SECONDS,
    ... )

That's all the fields you need: a period type and the frequency.

You can choose between a specific set of periods:

  • IntervalSchedule.DAYS
  • IntervalSchedule.HOURS
  • IntervalSchedule.MINUTES
  • IntervalSchedule.SECONDS
  • IntervalSchedule.MICROSECONDS

.. note:: If you have multiple periodic tasks executing every 10 seconds, then they should all point to the same schedule object.

There's also a "choices tuple" available should you need to present this to the user:

.. code-block:: Python

    >>> IntervalSchedule.PERIOD_CHOICES

Now that we have defined the schedule object, we can create the periodic task entry:

.. code-block:: Python

    >>> 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.
    ... )

Note that this is a very basic example, you can also specify the arguments and keyword arguments used to execute the task, the queue to send it to[*], and set an expiry time.

Here's an example specifying the arguments, note how JSON serialization is required:

.. code-block:: Python

    >>> 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)
    ... )

.. [*] you can also use low-level AMQP routing using the exchange and routing_key fields.

Example creating crontab-based periodic task

A crontab schedule has the fields: minute, hour, day_of_week, day_of_month and month_of_year, so if you want the equivalent of a 30 * * * * (execute every 30 minutes) crontab entry you specify:

.. code-block:: Python

    >>> 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=pytz.timezone('Canada/Pacific')
    ... )

The crontab schedule is linked to a specific timezone using the 'timezone' input parameter.

Then to create a periodic task using this schedule, use the same approach as the interval-based periodic task earlier in this document, but instead of interval=schedule, specify crontab=schedule:

.. code-block:: Python

    >>> PeriodicTask.objects.create(
    ...     crontab=schedule,
    ...     name='Importing contacts',
    ...     task='proj.tasks.import_contacts',
    ... )

Temporarily disable a periodic task

You can use the enabled flag to temporarily disable a periodic task:

.. code-block:: Python

    >>> periodic_task.enabled = False
    >>> periodic_task.save()

Example running periodic tasks

The periodic tasks still need 'workers' to execute them. So make sure the default Celery package is installed. (If not installed, please follow the installation instructions here: https://github.com/celery/celery)

Both the worker and beat services need to be running at the same time.

  1. Start a Celery worker service (specify your Django project name)::

    $ celery -A [project-name] worker --loglevel=info

  2. As a separate process, start the beat service (specify the Django scheduler)::

    $ celery -A [project-name] beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

    OR you can use the -S (scheduler flag), for more options see celery beat --help)::

    $ celery -A [project-name] beat -l info -S django

    Also, as an alternative, you can run the two steps above (worker and beat services) with only one command (recommended for development environment only)::

    $ celery -A [project-name] worker --beat --scheduler django --loglevel=info

  3. Now you can add and manage your periodic tasks from the Django Admin interface.

Installation

You can install django-celery-beat either via the Python Package Index (PyPI) or from source.

To install using pip:

.. code-block:: bash

    $ pip install -U django-celery-beat

Downloading and installing from source

Download the latest version of django-celery-beat from http://pypi.python.org/pypi/django-celery-beat

You can install it by doing the following :

.. code-block:: bash

    $ tar xvfz django-celery-beat-0.0.0.tar.gz
    $ cd django-celery-beat-0.0.0
    $ python setup.py build
    # python setup.py install

The last command must be executed as a privileged user if you are not currently using a virtualenv.

After installation, add django_celery_beat to Django's settings module:

.. code-block:: Python

    INSTALLED_APPS = [
        ...,
        'django_celery_beat',
    ]

Run the django_celery_beat migrations using:

.. code-block:: bash

    $ python manage.py migrate django_celery_beat

Using the development version

With pip


You can install the latest snapshot of django-celery-beat using the following
pip command:

.. code-block:: bash

        $ pip install https://github.com/celery/django-celery-beat/zipball/master#egg=django-celery-beat


Developing django-celery-beat
-----------------------------

To spin up a local development copy of django-celery-beat with Django admin at http://127.0.0.1:58000/admin/ run:

.. code-block:: bash

        $ docker-compose up --build

Log-in as user ``admin`` with password ``admin``.


TZ Awareness:
-------------

If you have a project that is time zone naive, you can set ``DJANGO_CELERY_BEAT_TZ_AWARE=False`` in your settings file.


.. |build-status| image:: https://secure.travis-ci.org/celery/django-celery-beat.svg?branch=master
    :alt: Build status
    :target: https://travis-ci.org/celery/django-celery-beat

.. |coverage| image:: https://codecov.io/github/celery/django-celery-beat/coverage.svg?branch=master
    :target: https://codecov.io/github/celery/django-celery-beat?branch=master

.. |license| image:: https://img.shields.io/pypi/l/django-celery-beat.svg#foo
    :alt: BSD License
    :target: https://opensource.org/licenses/BSD-3-Clause

.. |wheel| image:: https://img.shields.io/pypi/wheel/django-celery-beat.svg#foo
    :alt: django-celery-beat can be installed via wheel
    :target: http://pypi.python.org/pypi/django-celery-beat/

.. |pyversion| image:: https://img.shields.io/pypi/pyversions/django-celery-beat.svg#foo
    :alt: Supported Python versions.
    :target: http://pypi.python.org/pypi/django-celery-beat/

.. |pyimp| image:: https://img.shields.io/pypi/implementation/django-celery-beat.svg#foo
    :alt: Support Python implementations.
    :target: http://pypi.python.org/pypi/django-celery-beat/

django-celery-beat as part of the Tidelift Subscription
-------------------------------------------------------

The maintainers of django-celery-beat and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. `Learn more`_.

.. _Learn more: https://tidelift.com/subscription/pkg/pypi-django-celery-beat?utm_source=pypi-django-celery-beat&utm_medium=referral&utm_campaign=readme&utm_term=repo
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].