> 백엔드 개발 > 파이썬 튜토리얼 > 파이썬 분산 잠금

파이썬 분산 잠금

巴扎黑
풀어 주다: 2016-12-09 14:49:19
원래의
1354명이 탐색했습니다.

시간이 많이 걸리는 쿼리를 수행할 때 반복 계산을 피하기 위해 분산 잠금 서비스를 사용할 수 있습니다.
동시에 하나의 작업만 수행되며 유사한 작업이 재시도를 기다리고 있습니다. 다음 코드(fetch_with_dist_lock)는 fetcher와 updater를 정의합니다.
fetcher가 데이터를 얻을 수 없는 경우 updater를 사용하여 업데이트가 성공한 후 결과가 fetcher를 통해 반환됩니다. 또한 특정 데이터에 대해 여러 업데이트 프로그램이 있지만 업데이트 작업이 원자적이지 않은 경우도 있습니다.
update_with_dist_lock을 통해 수행합니다.

def fetch_with_dist_lock(mc_store, mutex_key, fetcher, updater,
                        lock_time=3*60*1000, sleep_time=100, retry_times=3):
    i = 0
    while i < retry_times:
        i += 1
        need_update, results = fetcher()
        if need_update:
            if(mc_store.add(mutex_key, lock_time)):
                try:
                    updater()
                    continue
                finally:
                    #release the distribute mutex anyway
                    mc_store.delete(mutex_key)
            else:
                time.sleep((sleep_time*1.0)/1000)
                continue
        return results
    #too much tries, but failed still.
    return None
def f_wrapper(f, *args, **kwargs):
    def _():
        return f(*args, **kwargs)
    return _
def update_with_dist_lock(mc_store, mutex_key, updater, lock_time=60*1000, sleep_time=100, retry_times=5):
    i = 0
    while i < retry_times:
        i += 1
        if (mc_store.add(mutex_key, lock_time)):
            try:
                updater()
                return True
            finally:
                mc_store.delete(mutex_key)
        else:
            time.sleep((sleep_time*1.0)/1000)
            continue
    return False
로그인 후 복사

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿