"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 다중 처리를 사용하여 Python에서 프로세스 간 잠금을 공유하는 방법

다중 처리를 사용하여 Python에서 프로세스 간 잠금을 공유하는 방법

2024-11-05에 게시됨
검색:209

How to Share a Lock Between Processes in Python Using Multiprocessing

Python에서 프로세스 간 잠금 공유

pool.map()을 사용하여 Lock() 객체를 포함하여 여러 매개변수가 있는 함수를 대상으로 지정하려고 하면 다음과 같습니다. 하위 프로세스 간 잠금 공유 문제를 해결하는 데 매우 중요합니다. 기존 다중 처리.Lock()은 피클링 제한으로 인해 Pool 메서드에 직접 전달할 수 없습니다.

옵션 1: Manager 및 Manager.Lock() 사용

한 가지 접근 방식은 Manager()를 활용하는 것입니다. Manager.Lock()을 인스턴스화합니다. 이 방법은 안정적이지만 Manager 서버를 호스팅하는 추가 프로세스로 인해 더 많은 오버헤드가 발생합니다. 또한 잠금 작업을 수행하려면 IPC를 통해 이 서버와 통신해야 합니다.

옵션 2: 이니셜라이저를 사용하여 풀 생성 시 잠금 전달

또는 다음을 사용하여 풀 초기화 중에 일반 다중 처리.Lock()을 전달할 수 있습니다. 초기화 키워드 인수. 이렇게 하면 잠금 인스턴스가 모든 하위 작업자에서 전역적으로 적용됩니다. 이 방법은 부분 함수의 필요성을 제거하고 프로세스를 간소화합니다.

다음은 옵션 2를 사용하는 예입니다.

def target(iterable_item):
    for item in items:
        # Do cool stuff
        if (... some condition here ...):
            lock.acquire()
            # Write to stdout or logfile, etc.
            lock.release()

def init(l):
    global lock
    lock = l

def main():
    iterable = [1, 2, 3, 4, 5]
    l = multiprocessing.Lock()
    pool = multiprocessing.Pool(initializer=init, initargs=(l,))
    pool.map(target, iterable)
    pool.close()
    pool.join()
릴리스 선언문 이 글은 1729132755에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3