">
서문
을 참고하시면 됩니다. 네트워크 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!