비 차단 모드로 열린 Linux FIFO가 있습니다. 예상대로 파일 개체에 대한 읽기를 호출하면 즉시 반환됩니다. select를 사용하여 대기중인 대기 시간이 없는지 확인하지만 사용 가능한 데이터가있을 때 내 프로그램에 계속 알림이 전송됩니다. 호기심에서 나는 readline 함수를 시도해 보았고, 개행 문자가 발견 될 때까지 readline 블록을 발견하는 것에 놀랐다. 내가 가기를 통해 프로세서 사용량을 검사하고 그것은 readline처럼 바쁜 대기하지 않는 것 같습니다. 내 응용 프로그램은 성능에 민감하기 때문에 nonblocking 소켓에서 readline을 사용할 때 성능에 영향이 있는지 궁금합니다.비 차단으로 열린 파이프의 Python readline
3
A
답변
1
파이썬의 readline의 핵심 부분은 fileobject.c에 있습니다 get_line 및
#ifdef HAVE_GETC_UNLOCKED
#define GETC(f) getc_unlocked(f)
#define FLOCKFILE(f) flockfile(f)
#define FUNLOCKFILE(f) funlockfile(f)
#else
#define GETC(f) getc(f)
#define FLOCKFILE(f)
#define FUNLOCKFILE(f)
#endif
이 진행 특별한 아무것도 없습니다
FILE_BEGIN_ALLOW_THREADS(f)
FLOCKFILE(fp);
while ((c = GETC(fp)) != EOF &&
(*buf++ = c) != '\n' &&
buf != end)
;
FUNLOCKFILE(fp);
FILE_END_ALLOW_THREADS(f)
입니다. 당신의 관찰이 당신이 생각하는 것이라고 확신합니까?
+0
나를 위해이 코드 스 니펫을 찾아 주셔서 감사합니다. 당신이 게시 한 코드와 관련하여, 내 질문은 fp가 비 블로킹 인 경우 데이터가없는 즉시 GETC (fp)가 반환되는지 여부입니다. 즉, while 루프가 빠르게 반복되고 CPU주기가 낭비되는 것을 의미합니다. – BrainCore
+0
이 경우 C가 무엇을하는지 모르겠습니다. 최상의 것은 당신이 재현성있는 것을 게시 할 수 있고 당신의 관찰을 다시 확인할 수있는 것입니다. 나는 그것이 바쁜 기다릴 것이라고 생각 하겠지만, 당신은 그것이 아니라고보고했다. –
관련 문제
- 1. Python : select()가 파이프의 모든 입력을 알리지 않습니다.
- 2. 어떻게 파이썬에서 readline()을 차단하여 폴링 할 필요가 없습니까?
- 3. ReadLine() 콜백
- 4. Python 2에서 Python 3의 클래스를 비 꾸미기
- 5. 파이프의 상태 및 상태
- 6. Python TestCase의 비 테스트 메소드
- 7. 파이프의 GetFileSize() 대체로 무엇을 사용합니까?
- 8. 명명 된 파이프의 이름 생성
- 9. Groovy tcp readline
- 10. 완료를 위해 readline() 사용
- 11. StreamReader ReadLine 함수
- 12. GNU readline 공백 인용
- 13. Adobe AIR readLine
- 14. Term :: Readline : 인코딩 질문
- 15. 리포 수입의 readline 오류
- 16. C readline 함수
- 17. 비 문서 기반 응용 프로그램에서 열린 파일 메뉴 항목 활성화
- 18. 열린 선반 파일
- 19. 클래스 정의에있는 Python 비 지역 문
- 20. 비 Python 파일을 setup.py와 함께 포함
- 21. OS X에서 readline 6.0 설치
- 22. ASP Readline 비표준 라인 종료
- 23. C에서 GNU Readline 구현하기 도움말
- 24. Java 용 readline 류 라이브러리
- 25. DataInputStream은 readLine() 메소드를 사용하지 않습니다.
- 26. Readline 지원을 Ruby로 컴파일하는 방법
- 27. Python 2.6.4 marshal.load는 subprocess.Popen으로 만든 열린 파일 객체를 허용하지 않습니다.
- 28. ARCGIS : TOC에 열린 기능
- 29. WCF 명명 된 파이프의 무결성을 낮추는 방법
- 30. 명명 된 파이프의 문제를 어떻게 해결합니까?
개행까지 입력을 버퍼링하지 않으면'readline'이 어떻게 작동 할 것으로 기대하십니까? – pavpanchekha
예외가 발생하거나 C 레벨 오류 번호가 발생하지 않으면 현재 동작이 적절합니다. 파이썬이 개행 문자를 찾을 때까지 비 블로킹 소켓에서 getc를 폴링하지 않는다는 사실에 더 놀랐습니다. – BrainCore