I'm not sure that using a cache system as a lock mechanism is a good idea.

What I would do is setup a task queue (using celery and rabbitMQ) with a
single worker, that way you guarantee that only one task is running at a
time and you can queue as many as you want. Also, each task has a maximum
lifespan, after that it kill itself and the workers starts executing the
next task in the queue automatically.

On Thu, Dec 18, 2014 at 8:20 AM, Erik Cederstrand <[email protected]
> wrote:
>
> Hi list,
>
> I'm using Django as a hub to synchronize data between various external
> systems. To do this, I have some long-running Django management commands
> that are started as cron jobs. To ensure that only one job is working on a
> data set at any one time, I have implemented a locking system using the
> Django cache system.
>
> Due to my less-than-stellar programming talent, a cron job may need to be
> killed once in a while. To avoid leaving orphaned locks in the cache, I
> want to clean up any locks before exiting, and I may not know which cache
> keys exist at the time of exit. Therefore, I want to write a signal handler
> that searches the Django cache for any entries that can be traced to the
> current process (my cache keys can be used for this purpose) and delete
> those.
>
> AFAICS, the Django cache API can't be used for this. There's cache.clear()
> but I don't want to delete all cache entries. I'm using the database
> backend, so I'm thinking I could access the database table directly and
> issue any custom SQL on that. But it does feel hackish, so maybe one of you
> have a better approach? Maybe I got the whole thing backwards?
>
> Here's my cache setup from settings.py:
>
> CACHES = {
>     'default': {
>         'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
>         'LOCATION': 'dispatch_cache',
>         'TIMEOUT': None,
>     }
> }
>
>
> Thanks,
> Erik
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/9A6110DB-9D5A-4A3F-9DD3-49CC406C1C18%40cederstrand.dk
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CALn3ei0D2ZL7YJb17ibGDnBDJvTXg%2B2Hj%3DwrCZearRZBjzvpNQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to