Как заблокировать команду django для одиночного запуска.Джанго.питон - PullRequest
1 голос
/ 11 августа 2010

Как заблокировать команды django, чтобы они не запускались одновременно?

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

Создание блокировки где-нибудь - недавно я видел очень простую реализацию блокировки, которая использовала кеш:

LOCK_EXPIRE = 60 * 5

lock_id = "%s-lock-%s" % (self.name, id_hexdigest) #computed earlier

is_locked = lambda: str(cache.get(lock_id)) == "true"
acquire_lock = lambda: cache.set(lock_id, "true", LOCK_EXPIRE)
release_lock = lambda: cache.set(lock_id, "nil", 1)

if not is_locked():
    aquire_lock()
    try:
        #do something
    finally:
        release_lock()

Это только одна из многих возможных реализаций.

Редактировать: Исправлено, я просто вставил кодне думая.Блок try...finally используется, чтобы гарантировать, что блокировка всегда снята, независимо от того, что происходит - но, конечно, if оператор также необходим.

1 голос
/ 11 августа 2010

Существует множество способов сделать это.Метод cji выглядит так, как будто он работает просто отлично.Одна вещь, которую я обычно делаю, - это если мои фоновые задания работают с объектами модели, я использую поля статуса, чтобы определить, может ли задание выполняться.сделать что-то вроде этого:

if book.status is 1:
    ## do something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...