Contributing a new locking backend is greatly appreciated! Each new backend must implement the following methods...
class Backend(object):
"""
Each new backend must implement the following methods,
- __init__
- raise_or_lock
- clear_lock
"""
def __init__(self, settings):
pass
def raise_or_lock(self, key, timeout):
pass
def clear_lock(self, key):
pass
Checks if the task is locked based on the key
argument (str).
If already locked should raise an AlreadyQueued
exception. If not, locks the task by the key. A timeout
argument (int) can also be passed in.
The key should be cleared after the timeout
(in seconds) has passed.
Removes the lock based on the key
argument (str). This is called after a task completes (either successfully, or fails beyond celery's retry limit).
The settings
argument (dict) is based on the celery once configuration.
This can be used to setup the connection/client to the backend.
Any imports for backend specific modules should happen inside here.
The redis backend is a good example of all of this in practice. If you'd like to contribute a new backend and still feel unsure how to do so, feel free to open an issue with any questions.