2013-03-30 4 views
10

최근 파이썬에서 병렬 프로그래밍 도구를 연구하고 있습니다. 그리고 여기 os.pipe과 multiprocessing.Pipe 사이의 두 가지 주요 차이점은파이썬 os.pipe 대 멀티 프로세싱. 파이프

  1. os.pipe이 단방향입니다 (그들이 사용하는 기회에도 불구하고), multiprocessing.Pipe이 양방향입니다.; 파이프에 물건을 놓을 때 multiprocessing.Pipe이 피클을 사용하는 반면
  2. 이/파이프에서 물건을받을 os.pipe가
내 이해가 정확한지 알고 싶어

unpickle/인 코드/디코드를 사용, 다른 차이점이 있습니까? 고맙습니다.

답변

6

나는 당신이 진술 한 모든 것이 정확하다고 믿습니다.

리눅스에서 os.pipe은 전통적인 POSIX 파이프에 액세스하기위한 단지 파이썬 인터페이스 일뿐입니다. Windows에서는 CreatePipe을 사용하여 구현됩니다. 이 파일을 호출하면 두 개의 일반 파일 설명자가 반환됩니다. 그것은 단방향이고 다른 쪽에서 읽힐 때까지 커널에 의해 버퍼 된 한쪽 끝에 바이트를 쓰면됩니다. Python 표준에 따르면 상당히 낮은 수준입니다.

multiprocessing.Pipe 개체는 훨씬 더 높은 수준의 인터페이스이며 multiprocessing.Connection 개체를 사용하여 구현됩니다. 리눅스에서는 실제로 POSIX 파이프가 아닌 POSIX 소켓 위에 빌드됩니다. Windows에서는 CreateNamedPipe API를 사용하여 빌드됩니다. 주목 한대로 multiprocessing.Connection 개체는 picklable 개체를 보내고받을 수 있으며 바이트 처리가 아니라 pickling/unpickling 프로세스를 자동으로 처리합니다. 그들은 양방향 및 단방향 모두 가능합니다.

관련 문제