파이썬 코드는 많은 읽기 연산이 수행되는 거대한 해시 테이블 (60GB +)을 생성한다. 작업 속도를 높이려면 각 작업을 동시에 수행 할 수 있도록 해시 테이블을 만든 후 (48 코어 시스템) 프로세스를 몇 번 포크하십시오.파이썬은 모든 fork 된 프로세스가 완료 될 때까지 기다린다.
일단 모든 fork 된 자식들이 자신의 결과를 병합하고 싶다면 부모 프로세스가 하나 이상의 PID를 기다릴 수있는 방법이 필요합니다. 어떻게해야합니까?
풋 프린트를 줄이기 위해 fork 된 프로세스의 메모리 페이지가 상위 주소 공간에 매핑되기 때문에 포킹이 핵심적인 부분입니다. 해시 테이블은 다른 라이브러리에 의해 생성되므로 해당 구현을 수정하는 것은 옵션이 아닙니다.
children = []
for index in batch:
tracks = batch[index]
pid = os.fork()
if pid == 0:
# forked process
run_batch(tracks, index)
else:
# main process
children.append(pid)
print('spawned child ', pid)
단순히'os.wait'을 사용하십시오. – Daniel
@Daniel 작동하지 않습니다. 'os.wait'는 하나의 프로세스 만 기다리고, 적어도 12는 있습니다. – DarthPaghius
주문을 중계하지 않습니다. 설명해주세요. 왜 '대기'를 사용할 수 없습니까? – Daniel