Lock() 객체를 포함하여 여러 매개변수가 있는 함수를 대상으로 pool.map()을 사용하려고 하면 하위 프로세스 간 잠금 공유 문제를 해결하는 데 매우 중요합니다. 기존 다중 처리.Lock()은 피클링 제한으로 인해 Pool 메서드에 직접 전달할 수 없습니다.
한 가지 접근 방식은 Manager()를 활용하는 것입니다. Manager.Lock()을 인스턴스화합니다. 이 방법은 안정적이지만 Manager 서버를 호스팅하는 추가 프로세스로 인해 더 많은 오버헤드가 발생합니다. 또한 잠금 작업을 수행하려면 IPC를 통해 이 서버와 통신해야 합니다.
또는 다음을 사용하여 풀 초기화 중에 일반 다중 처리.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!