Создание блокировки где-нибудь - недавно я видел очень простую реализацию блокировки, которая использовала кеш:
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
оператор также необходим.