여러 작업자 프로세스 간에 대기열 공유
다중 처리 모듈은 작업을 동시에 수행하기 위해 여러 프로세스를 생성하고 관리하는 메커니즘을 제공합니다. 일반적인 사용 사례 중 하나는 작업자 프로세스가 결과를 중앙 프로세스에 다시 보고하도록 하는 것입니다. 여기가 대기열이 작동하는 곳입니다. 그러나 Apply_async를 사용하여 작업자 프로세스를 생성하는 경우 프로세스 간에 대기열을 공유하는 것이 어려울 수 있습니다.
오류: 상속 전용 대기열 개체
Apply_async에 직접 큐를 추가하면 RuntimeError가 발생할 수 있습니다. "큐 개체는 상속을 통해 프로세스 간에만 공유되어야 합니다." 이 오류는 큐 인스턴스가 상속을 통해 직접 관련된 프로세스 간에만 공유될 수 있음을 나타냅니다. 제공된 코드에서는 작업자 프로세스가 기본 프로세스에서 상속되지 않아 오류가 발생합니다.
해결책: multiprocessing.Manager 사용
이 상속 제한을 극복하려면, 다중 처리는 Manager 클래스를 제공합니다. Manager는 대기열을 포함하여 여러 프로세스에서 공유할 수 있는 개체를 생성하는 방법을 제공합니다. Manager를 활용하면 상속 없이 모든 작업자 프로세스에 액세스할 수 있는 대기열을 생성할 수 있습니다.
리팩터링된 코드:
다음 코드는 공유 방법을 보여줍니다. multiprocessing.Manager를 사용하는 작업자 프로세스 간의 대기열:
import multiprocessing def worker(name, que): que.put("%d is done" % name) if __name__ == '__main__': pool = multiprocessing.Pool(processes=3) m = multiprocessing.Manager() q = m.Queue() workers = pool.apply_async(worker, (33, q))
이 코드에서 Manager()는 관리자 인스턴스 m을 생성한 다음 공유 대기열 q를 인스턴스화하는 데 사용됩니다. 대기열은 apply_async 메서드에 인수로 전달되어 작업자 프로세스가 대기열에 액세스하고 결과를 쓸 수 있도록 합니다. 이 접근 방식을 사용하면 공유 대기열을 통해 작업자 프로세스와 기본 프로세스 간의 통신이 가능해지며 상속 오류 가능성이 제거됩니다.
위 내용은 Python의 다중 처리 모듈에서 작업자 프로세스 간에 안전하게 대기열을 공유하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!