>  기사  >  백엔드 개발  >  다중 처리를 사용하여 Python에서 프로세스 간 잠금을 공유하는 방법

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

Linda Hamilton
Linda Hamilton원래의
2024-10-17 11:12:02913검색

How to Share a Lock Between Processes in Python Using Multiprocessing

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

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

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

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

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

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

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

<code class="python">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()</code>

위 내용은 다중 처리를 사용하여 Python에서 프로세스 간 잠금을 공유하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.