>백엔드 개발 >파이썬 튜토리얼 >성능 향상을 위해 Sys.stdin의 버퍼 크기를 줄이는 방법은 무엇입니까?

성능 향상을 위해 Sys.stdin의 버퍼 크기를 줄이는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-21 11:08:02765검색

How to Reduce Buffer Size in Sys.stdin for Improved Performance?

성능 향상을 위해 Sys.stdin 버퍼 크기 줄이기

플랫폼 전체에서 키에 대해 일치하지 않는 가져오기 및 집합을 추적하기 위해 Bash 명령이 실행됩니다.

<code class="bash">memcached -vv 2>&1 | tee memkeywatch2010098.log 2>&1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log</code>

stdin을 활용하는 memtracer 스크립트는 stdin의 버퍼 크기로 인해 처리에 상당한 지연이 발생합니다. 특히 memtracer.py는 중간 로그 파일인 memkeywatchYMD.log의 크기가 15-18K를 초과한 후에만 입력 처리를 시작합니다.

최적화된 처리를 위한 Unbuffering Sys.stdin

문제를 해결하려면 , Python은 stdin 및 stdout에서 버퍼링을 완전히 제거하여 들어오는 데이터를 즉시 처리할 수 있는 효과적인 방법을 제공합니다. -u 플래그를 활용하면 버퍼 크기 제한을 제거하고 스크립트의 응답 시간을 크게 향상시킬 수 있습니다.

<code class="bash">python -u memkeywatchCounts20100908.log</code>

대체 버퍼 조작 기법

또는 -를 사용하여 버퍼링을 해제하는 경우 u 플래그가 특정 요구 사항을 충족하지 않으면 os.fdopen을 사용하여 기존 파일 개체의 버퍼링을 수정할 수 있습니다. 이 접근 방식을 사용하면 기존 파일 설명자와 동일한 기본 파일 설명자를 사용하지만 버퍼링은 다른 새 파일 개체를 만들 수 있습니다. 예:

<code class="python">import os
import sys

newin = os.fdopen(sys.stdin.fileno(), 'r', 100)</code>

이 수정을 통해 newin은 표준 입력과 동일한 파일 설명자를 읽는 파일 개체에 바인딩되지만 버퍼 크기는 100바이트에 불과합니다. 이 접근 방식은 버퍼링 동작을 보다 세밀하게 제어할 수 있지만 플랫폼 간 호환성을 위한 추가 테스트가 필요합니다.

버퍼 크기 수정의 영향

버퍼되지 않은 stdin 또는 stdout 작업은 특히 대기 시간을 크게 줄이고 성능을 향상할 수 있습니다. 대용량 데이터를 지속적으로 처리할 때. 그러나 버퍼링을 제거하면 특정 사용 사례에서 해결해야 할 시스템 호출 및 커널 상호 작용 증가와 같은 다른 문제가 발생할 수도 있다는 점에 유의하세요.

위 내용은 성능 향상을 위해 Sys.stdin의 버퍼 크기를 줄이는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.