os.mkfifo() 명령을 통해 명명 된 파이프가 생성되었습니다. 두 개의 다른 파이썬 프로세스가이 명명 된 파이프에 액세스하고 프로세스 A가 읽고 프로세스 B가 쓰고 있습니다. 프로세스 A는 선택 기능을 사용하여 FIFO/파이프에서 사용 가능한 데이터가 언제 있는지를 결정합니다. 프로세스 B가 각 쓰기 호출 후에 플러시한다는 사실에도 불구하고 프로세스 A의 선택 기능이 항상 반환되는 것은 아닙니다 (새 데이터가없는 것처럼 계속 차단됩니다). 이 문제를 광범위하게 조사한 후에 프로세스 B가 실제 호출 전후 5KB의 가비지 쓰기를 추가하도록 프로그래밍했으며, 마찬가지로 프로세스 A는이 5KB를 무시하도록 프로그래밍되었습니다. 이제 모든 것이 잘 작동하고 select는 항상 적절하게 반환됩니다. 프로세스 B가 죽을 경우 프로세스 A의 select가 반환된다는 것을 알면이 해킹 해결책에 도달하게됩니다 (쓰기 및 플러시 후에 읽기 파이프에서 잠들 것입니다). 명명 된 파이프에 대한 Python 플러시에 문제가 있습니까?명명 된 파이프가 파이썬에서 플러시되지 않습니다.
4
A
답변
0
플러시 작업은 명명 된 파이프와 관련이 없습니다. 명명 된 파이프의 데이터는 메모리에 엄격하게 보관되며 읽기 전이나 FIFO가 닫힐 때까지 해제되지 않습니다.
+3
파이프로의 데이터 출력이 응용 프로그램 수준에서 버퍼링되면 플러시 작업이 여전히 관련 될 수 있습니다. –
+0
응용 프로그램 수준에서 버퍼링하는 것으로 추측하고 있습니다. 버그를 아는 사람이 있습니까? – BrainCore
1
어떤 API를 사용하고 있습니까? os.read()
및 os.write()
은 아무 것도 버퍼링하지 않습니다.
1
파이썬의 내부 버퍼링이 문제를 일으키는 지 알아 보려면 스크립트를 실행할 때 "파이썬"대신 "파이썬 -u"를 사용하십시오. 이것은 파이썬을 강제로 "unbuffered mode"로 만들 것이고, 이는 모든 출력을 순간적으로 출력 할 것입니다.
관련 문제
- 1. 명명 된 파이프가 로컬에있는 이유는 무엇입니까?
- 2. 명명 된 파이프가 실을 ?니 다?
- 3. 명명 된 파이프가 스크립트에서 중간에 닫힙니 까?
- 4. BASH에서 명명 된 파이프가 아래 첨자로 열리기를 기다리고 있습니까?
- 5. Windows 명명 된 파이프가 네트워크를 통해 작동하지 않습니까?
- 6. Java 소켓 OutputStream이 플러시되지 않습니다
- 7. swt.graphics.ImageLoader.save()가 플러시되지 않았습니까?
- 8. pySerial 버퍼가 플러시되지 않음
- 9. Html.BeginRouteForm이 명명 된 경로 URL을 생성하지 않습니다.
- 10. 명명 된 라우팅은 레일스에서 작동하지 않습니다.
- 11. HtmlTextWriter가 처리시 플러시되지 않습니까?
- 12. Perl 파이프가 Java 프로세스 출력을 리디렉션하지 않습니다.
- 13. 파이썬에서 가변 길이가 아닌 인수로 명명 된 인수를 사용
- 14. PHP Windows에서 명명 된 파이프
- 15. 파이프가 조각난 메시지를 읽을 수 있도록 허용
- 16. Facebook 캐시가 플러시되지 않습니까?
- 17. 명명 된 파이프 IPC
- 18. Django : 명명 된 URL/동일한 템플릿, 다른 명명 된 URL
- 19. 무엇이 '명명 된 타입'입니까
- 20. 무작위로 명명 된 모듈
- 21. 명명 된 파이프에서 선택
- 22. 명명 된 파이프는
- 23. 명명 된 범위
- 24. java의 명명 된 파이프
- 25. SSAS : 명명 된 쿼리
- 26. Clojure - 명명 된 인수
- 27. 명명 된 인수의 밑줄
- 28. 명명 된 파이프 문제
- 29. 명명 된 열로 그룹화
- 30. NSIS의 명명 된 파이프
문제를 나타내는 최소 테스트 코드를 게시 할 수 있습니까? 당신이 12 줄의 문제에 대해 충분히 설명해야한다고 설명합니다. – kriss