찾다
백엔드 개발파이썬 튜토리얼aiofiles 및 asyncio를 사용하여 Python에서 비동기식으로 파일 작업

비동기 코드는 Python 개발의 중심이 되었습니다. asyncio가 표준 라이브러리의 일부가 되고 이와 호환되는 기능을 제공하는 많은 타사 패키지가 있기 때문에 이 패러다임은 조만간 사라지지 않을 것입니다.

비동기 코드를 작성하는 경우 코드의 모든 부분이 함께 작동하여 코드의 한 측면으로 인해 다른 모든 부분이 느려지지 않도록 하는 것이 중요합니다. 파일 I/O는 이 측면에서 일반적인 차단 요인이 될 수 있으므로 aiofiles 라이브러리를 사용하여 파일을 비동기식으로 작업하는 방법을 살펴보겠습니다.

기본부터 시작하여 비동기적으로(비동기 함수 내에서) 파일 내용을 읽는 데 필요한 모든 코드는 다음과 같습니다.

async with aiofiles.open('filename', mode='r') as f:
    contents = await f.read()
print(contents)

더 자세히 알아보겠습니다.

비차단 코드란 무엇입니까?

'비동기', '비차단' 또는 '동시'와 같은 용어를 듣고 이들의 의미가 약간 혼란스러울 수도 있습니다. 이 훨씬 더 자세한 튜토리얼에 따르면 두 가지 주요 속성은 다음과 같습니다.

  • 비동기 루틴은 최종 결과를 기다리는 동안 "일시 중지"하여 그 동안 다른 루틴이 실행되도록 할 수 있습니다.
  • 위의 메커니즘을 통해 비동기 코드는 동시 실행을 용이하게 합니다. 다르게 말하면 비동기 코드는 동시성의 모양과 느낌을 제공합니다.

따라서 비동기 코드는 그 동안 다른 코드가 실행될 수 있도록 결과를 기다리는 동안 중단될 수 있는 코드입니다. 다른 코드의 실행을 "차단"하지 않으므로 "비차단" 코드라고 부를 수 있습니다.

asyncio 라이브러리는 Python 개발자가 이를 수행할 수 있는 다양한 도구를 제공하며, aiofiles는 파일 작업을 위한 훨씬 더 구체적인 기능을 제공합니다.

설정

시작하기 전에 Python 환경을 설정했는지 확인하세요. 도움이 필요하면 virtualenv 섹션을 통해 이 가이드를 따르세요. 특히 가상 환경과 관련하여 모든 것이 올바르게 작동하도록 하는 것은 동일한 시스템에서 여러 프로젝트가 실행되는 경우 종속성을 격리하는 데 중요합니다. 이 게시물의 코드를 실행하려면 Python 3.7 이상이 필요합니다.

이제 환경이 설정되었으므로 일부 타사 라이브러리를 설치해야 합니다. 우리는 aiofiles를 사용할 것이므로 가상 환경을 활성화한 후 다음 명령으로 설치하십시오.

pip install aiofiles==0.6.0

이 게시물의 나머지 부분에서는 원본 150마리의 포켓몬에 해당하는 포켓몬 API 데이터의 JSON 파일을 사용합니다. 여기에서 모든 항목이 포함된 폴더를 다운로드할 수 있습니다. 이제 다음 단계로 넘어가 코드를 작성할 준비가 되었습니다.

aiofiles로 파일 읽기

특정 포켓몬에 해당하는 파일을 열고 JSON을 사전으로 구문 분석한 후 이름을 출력하는 것부터 시작하겠습니다.

async with aiofiles.open('filename', mode='r') as f:
    contents = await f.read()
print(contents)

이 코드를 실행하면 터미널에 "articuno"가 인쇄되는 것을 볼 수 있습니다. 파일을 한 줄씩 비동기적으로 반복할 수도 있습니다(이 코드는 articuno.json의 9271줄을 모두 인쇄합니다).

pip install aiofiles==0.6.0

aiofiles를 사용하여 파일에 쓰기

파일에 쓰는 것도 표준 Python 파일 I/O와 유사합니다. 각 포켓몬이 배울 수 있는 모든 동작 목록이 포함된 파일을 만들고 싶다고 가정해 보겠습니다. 간단한 예를 들어, "변형" 동작만 배울 수 있는 포켓몬 Ditto에 대해 수행할 작업은 다음과 같습니다.

import aiofiles
import asyncio
import json


async def main():
    async with aiofiles.open('articuno.json', mode='r') as f:
        contents = await f.read()
    pokemon = json.loads(contents)
    print(pokemon['name'])

asyncio.run(main())

Rhydon처럼 둘 이상의 움직임을 가진 포켓몬으로 이것을 시도해 보겠습니다.

import aiofiles
import asyncio

async def main():
    async with aiofiles.open('articuno.json', mode='r') as f:
        async for line in f:
            print(line)

asyncio.run(main())

rhydon_moves.txt를 열면 다음과 같이 시작하는 112줄의 파일이 표시됩니다.

A screenshot of the rhydon_moves.txt file

asyncio를 사용하여 많은 파일을 비동기적으로 처리

이제 조금 더 복잡해져서 JSON 파일이 있는 150개 포켓몬 모두에 대해 이 작업을 수행해 보겠습니다. 우리 코드는 모든 파일을 읽고, JSON을 구문 분석하고, 각 포켓몬의 동작을 새 파일에 다시 작성해야 합니다.

import aiofiles
import asyncio

async def main():
    async with aiofiles.open('ditto_moves.txt', mode='w') as f:
        await f.write('transform')

asyncio.run(main())

이 코드를 실행하면 각 포켓몬에 해당하는 이동 목록이 포함된 .json 파일과 함께 .txt 파일로 채워진 포켓몬 파일 디렉터리가 표시됩니다.

A screenshot of the files in the directory

일부 비동기 작업을 수행해야 하고 파일을 작성한 후 각 포켓몬의 움직임 목록과 같은 비동기 작업에 해당하는 데이터로 끝내고 싶다면 asyncio.ensure_future 및 asyncio.gather를 사용할 수 있습니다.

각 파일을 처리하는 코드 부분을 자체 비동기 함수로 분리하고 해당 함수 호출에 대한 약속을 작업 목록에 추가할 수 있습니다. 다음은 해당 기능과 새로운 기본 기능의 예입니다.

import aiofiles
import asyncio
import json


async def main():
    # Read the contents of the json file.
    async with aiofiles.open('rhydon.json', mode='r') as f:
        contents = await f.read()

    # Load it into a dictionary and create a list of moves.
    pokemon = json.loads(contents)
    name = pokemon['name']
    moves = [move['move']['name'] for move in pokemon['moves']]

    # Open a new file to write the list of moves into.
    async with aiofiles.open(f'{name}_moves.txt', mode='w') as f:
        await f.write('\n'.join(moves))


asyncio.run(main())

이것은 Python에서 비동기 코드를 활용하는 일반적인 방법이며, HTTP 요청 등의 작업에 자주 사용됩니다.

그러면 이것을 무엇에 사용합니까?

포켓몬의 데이터를 사용한 이 게시물의 예제는 aiofiles 모듈의 기능과 읽고 쓰기 위해 파일 디렉터리를 탐색하는 코드를 작성하는 방법을 보여주기 위한 변명일 뿐입니다. 파일 I/O가 비동기 코드의 방해 요인이 되지 않도록 해결하려는 특정 문제에 이러한 코드 샘플을 적용할 수 있기를 바랍니다.

우리는 aiohttp 및 asyncio로 수행할 수 있는 작업의 극히 일부에 불과하지만 이를 통해 비동기 Python의 세계로의 여정을 좀 더 쉽게 시작할 수 있었으면 좋겠습니다.

당신이 무엇을 만들었는지 기대하고 있습니다. 언제든지 연락하여 경험을 공유하거나 궁금한 점이 있으면 문의하세요.

위 내용은 aiofiles 및 asyncio를 사용하여 Python에서 비동기식으로 파일 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

이 튜토리얼은 Python을 사용하여 Zipf의 법칙의 통계 개념을 처리하는 방법을 보여주고 법을 처리 할 때 Python의 읽기 및 대형 텍스트 파일을 정렬하는 효율성을 보여줍니다. ZIPF 분포라는 용어가 무엇을 의미하는지 궁금 할 것입니다. 이 용어를 이해하려면 먼저 Zipf의 법칙을 정의해야합니다. 걱정하지 마세요. 지침을 단순화하려고 노력할 것입니다. Zipf의 법칙 Zipf의 법칙은 단순히 : 큰 자연어 코퍼스에서 가장 자주 발생하는 단어는 두 번째 빈번한 단어, 세 번째 빈번한 단어보다 세 번, 네 번째 빈번한 단어 등 4 배나 자주 발생합니다. 예를 살펴 보겠습니다. 미국 영어로 브라운 코퍼스를 보면 가장 빈번한 단어는 "TH입니다.

파이썬의 이미지 필터링파이썬의 이미지 필터링Mar 03, 2025 am 09:44 AM

시끄러운 이미지를 다루는 것은 특히 휴대폰 또는 저해상도 카메라 사진에서 일반적인 문제입니다. 이 튜토리얼은 OpenCV를 사용 하여이 문제를 해결하기 위해 Python의 이미지 필터링 기술을 탐구합니다. 이미지 필터링 : 강력한 도구 이미지 필터

HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까?HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까?Mar 10, 2025 pm 06:54 PM

이 기사에서는 HTML을 구문 분석하기 위해 파이썬 라이브러리 인 아름다운 수프를 사용하는 방법을 설명합니다. 데이터 추출, 다양한 HTML 구조 및 오류 처리 및 대안 (SEL과 같은 Find (), find_all (), select () 및 get_text ()와 같은 일반적인 방법을 자세히 설명합니다.

파이썬의 병렬 및 동시 프로그래밍 소개파이썬의 병렬 및 동시 프로그래밍 소개Mar 03, 2025 am 10:32 AM

데이터 과학 및 처리가 가장 좋아하는 Python은 고성능 컴퓨팅을위한 풍부한 생태계를 제공합니다. 그러나 Python의 병렬 프로그래밍은 독특한 과제를 제시합니다. 이 튜토리얼은 이러한 과제를 탐구하며 전 세계 해석에 중점을 둡니다.

Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까?Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까?Mar 10, 2025 pm 06:52 PM

이 기사는 딥 러닝을 위해 텐서 플로와 Pytorch를 비교합니다. 데이터 준비, 모델 구축, 교육, 평가 및 배포와 관련된 단계에 대해 자세히 설명합니다. 프레임 워크, 특히 계산 포도와 관련하여 주요 차이점

파이썬에서 자신의 데이터 구조를 구현하는 방법파이썬에서 자신의 데이터 구조를 구현하는 방법Mar 03, 2025 am 09:28 AM

이 튜토리얼은 Python 3에서 사용자 정의 파이프 라인 데이터 구조를 작성하여 클래스 및 작업자 과부하를 활용하여 향상된 기능을 보여줍니다. 파이프 라인의 유연성은 일련의 기능을 데이터 세트, GE에 적용하는 능력에 있습니다.

파이썬 객체의 직렬화 및 사제화 : 1 부파이썬 객체의 직렬화 및 사제화 : 1 부Mar 08, 2025 am 09:39 AM

파이썬 객체의 직렬화 및 사막화는 사소한 프로그램의 주요 측면입니다. 무언가를 Python 파일에 저장하면 구성 파일을 읽거나 HTTP 요청에 응답하는 경우 객체 직렬화 및 사태화를 수행합니다. 어떤 의미에서, 직렬화와 사제화는 세계에서 가장 지루한 것들입니다. 이 모든 형식과 프로토콜에 대해 누가 걱정합니까? 일부 파이썬 객체를 지속하거나 스트리밍하여 나중에 완전히 검색하려고합니다. 이것은 세상을 개념적 차원에서 볼 수있는 좋은 방법입니다. 그러나 실제 수준에서 선택한 직렬화 체계, 형식 또는 프로토콜은 속도, 보안, 유지 보수 상태 및 프로그램의 기타 측면을 결정할 수 있습니다.

파이썬의 수학 모듈 : 통계파이썬의 수학 모듈 : 통계Mar 09, 2025 am 11:40 AM

Python의 통계 모듈은 강력한 데이터 통계 분석 기능을 제공하여 생물 통계 및 비즈니스 분석과 같은 데이터의 전반적인 특성을 빠르게 이해할 수 있도록 도와줍니다. 데이터 포인트를 하나씩 보는 대신 평균 또는 분산과 같은 통계를보고 무시할 수있는 원래 데이터에서 트렌드와 기능을 발견하고 대형 데이터 세트를보다 쉽고 효과적으로 비교하십시오. 이 튜토리얼은 평균을 계산하고 데이터 세트의 분산 정도를 측정하는 방법을 설명합니다. 달리 명시되지 않는 한,이 모듈의 모든 함수는 단순히 평균을 합산하는 대신 평균 () 함수의 계산을 지원합니다. 부동 소수점 번호도 사용할 수 있습니다. 무작위로 가져옵니다 수입 통계 Fracti에서

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경