A Celery Beat Scheduler using Redis for persistent storage
Project description
RedisBeater
.. image:: https://img.shields.io/pypi/v/celery-redisbeater.svg :target: https://pypi.python.org/pypi/celery-redisbeater :alt: PyPI
.. image:: https://github.com/saber-solooki/redisbeater/workflows/RedisBeater%20CI/badge.svg :target: https://github.com/saber-solooki/redisbeater/actions :alt: Actions Status
.. image:: https://readthedocs.org/projects/redbeat/badge/?version=latest&style=flat :target: https://redbeat.readthedocs.io/en/latest/ :alt: ReadTheDocs
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/psf/black :alt: Code style: black
RedisBeater <https://github.com/saber-solooki/redisbeater>
_ is a
Celery Beat Scheduler <http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html>
_
that stores the scheduled tasks and runtime metadata in Redis <http://redis.io/>
. It is a
fork of RedBeat <https://github.com/sibson/redbeat>
Why RedisBeater?
#. Dynamic live task creation and modification, without lengthy downtime #. Externally manage tasks from any language with Redis bindings #. Shared data store; Beat isn't tied to a single drive or machine #. Fast startup even with a large task count #. Prevent accidentally running multiple Beat servers #. Work with any schedule class which provide required interface
For more background on the genesis of RedisBeater see this blog post <https://blog.heroku.com/redbeat-celery-beat-scheduler>
_
Getting Started
Install with pip:
.. code-block:: console
pip install celery-redisbeater
Configure RedisBeater settings in your Celery configuration file:
.. code-block:: python
redisbeater_redis_url = "redis://localhost:6379/1"
Then specify the scheduler when running Celery Beat:
.. code-block:: console
celery beat -S redisbeater.RedisBeaterScheduler
RedisBeater uses a distributed lock to prevent multiple instances running. To disable this feature, set:
.. code-block:: python
redisbeater_lock_key = None
More details available on Read the Docs <https://redbeat.readthedocs.io/en/latest/>
_
You can initialize and use RedisBeater just as use
forked project <https://github.com/sibson/redbeat>
_. You just need to replace
RedBeat with RedisBeater. For instance:
.. code-block:: python
RedisBeaterSchedulerEntry(
'task-name',
'tasks.some_task',
interval,
args=['arg1', 2],
).save()
Custom Schedule
If you want to use your custom schedule class, you must define encode_beater
method and return fields that your class needs when initialized by
RedisBeaterScheduler
later. For instance:
.. code-block:: python
class customecrontab(BaseSchedule):
def __init__(self, minute='*', hour='*', day_of_week='*',
day_of_month='*', month_of_year='*', **kwargs):
self.hour = hour
self.minute = minute
self.day_of_week = day_of_week
self.day_of_month = day_of_month
self.month_of_year = month_of_year
super(crontab, self).__init__(**kwargs)
def encode_beater(self):
return {
'minute': self.minute,
'hour': self.hour,
'day_of_week': self.day_of_week,
'day_of_month': self.day_of_month,
'month_of_year': self.month_of_year,
}
Development
RedisBeater is available on GitHub <https://github.com/saber-solooki/redisbeater>
_
Once you have the source you can run the tests with the following commands::
pip install -r requirements.dev.txt
py.test tests
You can also quickly fire up a sample Beat instance with::
celery beat --config exampleconf
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for celery_redisbeater-1.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc1d5025d5d8f787478405716f21e23e562dc50f613f633a69d26b5271944620 |
|
MD5 | 094e846f22c26bdc51318d09fa6d9f19 |
|
BLAKE2b-256 | a915f623c285a5cba59e0bbd5e3911691063196d4a57450a4c012975463fd079 |