> 백엔드 개발 > 파이썬 튜토리얼 > 고성능 비동기 웹 개발을 위한 강력한 Python 라이브러리

고성능 비동기 웹 개발을 위한 강력한 Python 라이브러리

Mary-Kate Olsen
풀어 주다: 2025-01-21 00:16:09
원래의
229명이 탐색했습니다.

owerful Python Libraries for High-Performance Async Web Development

다작 작가로서 Amazon에서 제 책을 살펴보시기 바랍니다. 지속적인 지원을 받으려면 Medium에서 저를 팔로우하는 것을 잊지 마세요. 감사합니다! 여러분의 지원은 매우 소중합니다!

Python의 비동기 기능은 웹 개발에 혁명을 일으켰습니다. 저는 이러한 잠재력을 최대한 활용하는 여러 강력한 라이브러리를 사용하여 작업할 기회를 가졌습니다. 비동기식 웹 개발에 큰 영향을 미친 6가지 핵심 라이브러리를 살펴보겠습니다.

FastAPI는 고성능 API 생성을 위해 제가 선호하는 프레임워크가 되었습니다. 속도, 사용자 친화성 및 자동 API 문서화는 탁월합니다. FastAPI의 Python 유형 힌트 사용은 코드 가독성을 향상시키고 자동 요청 검증 및 직렬화를 가능하게 합니다.

다음은 간단한 FastAPI 애플리케이션 예입니다.

<code class="language-python">from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}</code>
로그인 후 복사
로그인 후 복사

이 코드는 두 개의 엔드포인트가 있는 기본 API를 설정합니다. item_id 매개변수의 유형 힌트는 정수 데이터 유형의 유효성을 자동으로 확인합니다.

클라이언트측 및 서버측 비동기 HTTP 작업 모두에서 aiohttp는 지속적으로 안정적인 것으로 입증되었습니다. 동시 API 요청부터 완전한 웹 서버 구축까지 그 다양성이 확장됩니다.

다음은 여러 동시 요청에 대해 aiohttp를 클라이언트로 사용하는 방법입니다.

<code class="language-python">import aiohttp
import asyncio

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    urls = ['http://example.com', 'http://example.org', 'http://example.net']
    async with aiohttp.ClientSession() as session:
        tasks = [fetch(session, url) for url in urls]
        responses = await asyncio.gather(*tasks)
        for url, response in zip(urls, responses):
            print(f"{url}: {len(response)} bytes")

asyncio.run(main())</code>
로그인 후 복사

이 스크립트는 여러 URL에서 콘텐츠를 동시에 검색하여 비동기 작업 효율성을 보여줍니다.

Sanic은 플라스크와 같은 단순성과 비동기 성능이 결합된 점이 저에게 깊은 인상을 주었습니다. 비동기 프로그래밍의 잠재력을 최대한 활용하면서 Flask에 익숙한 개발자를 위해 설계되었습니다.

기본 Sanic 애플리케이션:

<code class="language-python">from sanic import Sanic
from sanic.response import json

app = Sanic("MyApp")

@app.route("/")
async def test(request):
    return json({"hello": "world"})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)</code>
로그인 후 복사

이는 Sanic의 명확한 구문을 강조하는 간단한 JSON API 엔드포인트를 설정합니다.

Tornado는 확장 가능하고 차단되지 않는 웹 애플리케이션을 만들기 위한 신뢰할 수 있는 선택이었습니다. 통합 네트워킹 라이브러리는 특히 장기 폴링 및 WebSocket에 유용합니다.

다음은 Tornado WebSocket 처리기 예입니다.

<code class="language-python">import tornado.ioloop
import tornado.web
import tornado.websocket

class EchoWebSocket(tornado.websocket.WebSocketHandler):
    def open(self):
        print("WebSocket opened")

    def on_message(self, message):
        self.write_message(u"You said: " + message)

    def on_close(self):
        print("WebSocket closed")

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/websocket", EchoWebSocket),
    ])
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()</code>
로그인 후 복사

이 코드는 수신된 메시지를 미러링하는 WebSocket 서버를 설정합니다.

Quart는 완전히 다시 작성하지 않고도 Flask 애플리케이션을 비동기 작업으로 마이그레이션해야 하는 프로젝트에 혁신을 가져왔습니다. API는 Flask를 밀접하게 반영하여 원활한 전환을 보장합니다.

간단한 Quart 애플리케이션:

<code class="language-python">from quart import Quart, websocket

app = Quart(__name__)

@app.route('/')
async def hello():
    return 'Hello, World!'

@app.websocket('/ws')
async def ws():
    while True:
        data = await websocket.receive()
        await websocket.send(f"echo {data}")

if __name__ == '__main__':
    app.run()</code>
로그인 후 복사

이는 표준 및 WebSocket 경로를 모두 보여주며 Quart의 다양성을 보여줍니다.

Starlette는 제가 선호하는 경량 ASGI 프레임워크의 기반 역할을 합니다. FastAPI의 기반으로 고성능 비동기 웹 서비스 구축에 탁월합니다.

기본 Starlette 애플리케이션:

<code class="language-python">from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route

async def homepage(request):
    return JSONResponse({'hello': 'world'})

app = Starlette(debug=True, routes=[
    Route('/', homepage),
])</code>
로그인 후 복사

간단한 JSON API를 설정하여 Starlette의 미니멀리스트 디자인을 강조합니다.

이러한 비동기 라이브러리를 사용하면서 애플리케이션 성능과 안정성 향상을 위한 몇 가지 모범 사례를 배웠습니다.

장기 실행 작업의 경우 기본 이벤트 루프가 차단되는 것을 방지하려면 백그라운드 작업 또는 작업 대기열이 필수적입니다. FastAPI의 BackgroundTasks:

을 사용한 예는 다음과 같습니다.
<code class="language-python">from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}</code>
로그인 후 복사
로그인 후 복사

이렇게 하면 로그 쓰기를 비동기식으로 예약하여 즉각적인 API 응답이 가능합니다.

데이터베이스 작업의 경우 비동기 데이터베이스 드라이버가 중요합니다. asyncpg(PostgreSQL) 및 motor(MongoDB)와 같은 라이브러리는 매우 중요합니다.

외부 API와 상호작용할 때 적절한 오류 처리 및 재시도 기능을 갖춘 비동기 HTTP 클라이언트가 필수적입니다.

성능 측면에서 FastAPI와 Sanic은 일반적으로 간단한 API에 대해 우수한 원시 성능을 제공합니다. 그러나 프레임워크 선택은 프로젝트 요구 사항과 팀 친숙도에 따라 달라지는 경우가 많습니다.

FastAPI는 자동 API 문서화 및 요청 검증 기능이 뛰어납니다. Aiohttp는 HTTP 클라이언트/서버 동작을 더 효과적으로 제어할 수 있습니다. Sanic은 비동기 기능을 통해 Flask와 같은 단순성을 제공합니다. Tornado의 통합 네트워킹 라이브러리는 WebSocket 및 장기 폴링에 이상적입니다. Quart는 Flask 애플리케이션을 비동기 작업으로 쉽게 마이그레이션합니다. Starlette는 맞춤형 프레임워크 또는 경량 ASGI 서버를 구축하는 데 탁월합니다.

요약하자면, 이 6개 라이브러리는 Python에서 효율적인 고성능 비동기 웹 애플리케이션을 구축하는 능력을 크게 향상시켰습니다. 각각은 고유한 장점을 갖고 있으며 최적의 선택은 프로젝트의 특정 요구 사항에 따라 달라집니다. 이러한 도구를 활용하고 비동기식 모범 사례를 준수함으로써 동시성, 반응성, 확장성이 뛰어난 웹 애플리케이션을 만들었습니다.


101권

101 Books는 작가 Aarav Joshi가 공동 설립한 AI 기반 출판사입니다. 우리의 고급 AI 기술은 출판 비용을 매우 낮게 유지합니다. 일부 도서의 가격은 $4만큼 저렴하여 모든 사람이 양질의 지식에 접근할 수 있습니다.

Amazon에서 Golang Clean Code 책을 찾아보세요.

최신 뉴스를 받아보세요. 책을 검색할 때 Aarav Joshi를 검색해 더 많은 책을 찾아보세요. 특별 할인을 받으시려면 제공된 링크를 이용하세요!

우리의 창작물

저희 창작물을 살펴보세요.

인베스터 센트럴 | 투자자 중앙 스페인어 | 중앙 독일 투자자 | 스마트리빙 | 시대와 메아리 | 수수께끼의 미스터리 | 힌두트바 | 엘리트 개발자 | JS 학교


Medium에 있습니다

테크 코알라 인사이트 | Epochs & Echoes World | 투자자중앙매체 | 수수께끼 미스터리 매체 | 과학과 신기원 매체 | 현대 힌두트바

위 내용은 고성능 비동기 웹 개발을 위한 강력한 Python 라이브러리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿