>백엔드 개발 >파이썬 튜토리얼 >Python에서 파일 읽기 및 쓰기를 캡슐화하기 위해 asyncio를 사용하는 방법에 대한 자세한 설명과 예

Python에서 파일 읽기 및 쓰기를 캡슐화하기 위해 asyncio를 사용하는 방법에 대한 자세한 설명과 예

高洛峰
高洛峰원래의
2017-03-28 15:24:312628검색

이 글에서는 주로 asyncio.Future 객체 를 사용하여 파일의 비동기 읽기 및 쓰기를 캡슐화하는 방법을 설명합니다. 도움이 필요한 친구들은

">

서문

을 참고하시면 됩니다. 네트워크 IO와 마찬가지로 파일을 읽고 쓰는 것도 번거로운 작업입니다. .

기본적으로 Python은 시스템의 차단 읽기 및 쓰기를 사용합니다. 이는

f = file('xx')
f.read()

가 asyncio에서 호출되면 이벤트 루프가 차단된다는 의미입니다. 🎜>.

이 문서에서는 asyncio.Future 개체를 사용하여 파일의 비동기 읽기 및 쓰기를 캡슐화하는 방법을 간략하게 설명합니다. -blocking

먼저 파일 읽기 및 쓰기를 비차단 형식으로 변경해야 합니다. 비차단의 경우 읽기에 대한 각 호출은 반환 값이 비어 있으면 즉시 반환됩니다. 그렇다면 파일 작업이 완료되지 않았다는 의미이고, 그렇지 않으면 파일 내용을 읽은 것입니다.

차단과 비차단 간의 전환은 운영체제와 관련이 있으므로 이 글에서는 Linux 버전에 대해서만 씁니다. 일단 경험해 보면 Python의 동작이

flag = fcntl.fcntl(self.fd, fcntl.F_GETFL) 
if fcntl.fcntl(self.fd, fcntl.F_SETFL, flag | os.O_NONBLOCK) != 0: 
  raise OSError()
Future 객체

Javascript의 Promise 객체와 유사하다는 것을 알 수 있습니다

. 자리 표시자이며 그 값은 미래에 계산됩니다.

result = wait future

를 사용하여 future가 값을 얻은 후 반환하고

future를 사용할 수 있습니다. .set_result(xxx).는 future 값을 설정할 수 있습니다. 즉, wait

연산자

는 future.result()를 자동으로 호출하여 값을 가져옵니다. >

loop.call_soon 메서드를 통해

함수

를 이벤트 루프에 삽입할 수 있습니다.

이 시점에서 비동기 파일 읽기 및 쓰기에 대한 아이디어가 드러납니다. 파일 읽기 및 쓰기가 완료되지 않은 경우 읽고 쓰기의 남은 바이트 수를 계산하고 읽기 및 쓰기가 완료될 때까지 이벤트 루프를 다시 삽입합니다.

기존 Unix 프로그래밍에서는 비차단 파일 읽기 및 쓰기를 위한 while

루프가 asyncio 이벤트 루프로 대체되었습니다.

위 내용은 Python에서 파일 읽기 및 쓰기를 캡슐화하기 위해 asyncio를 사용하는 방법에 대한 자세한 설명과 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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