亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Rumah pembangunan bahagian belakang Tutorial Python Maksimumkan Kecekapan FastAPI Anda: Pelaksanaan Caching dan Penguncian yang Sangat Pantas dengan py-cachify

Maksimumkan Kecekapan FastAPI Anda: Pelaksanaan Caching dan Penguncian yang Sangat Pantas dengan py-cachify

Dec 05, 2024 am 05:47 AM

Maximize Your FastAPI Efficiency: Blazingly Fast Implementation of Caching and Locking with py-cachify

Dalam dunia pembangunan web yang pantas, prestasi adalah yang terpenting. Mekanisme caching yang cekap boleh meningkatkan responsif API anda dengan ketara dengan mengurangkan pengiraan berlebihan dan pertanyaan pangkalan data. Dalam artikel ini, kami akan meneroka cara untuk menyepadukan perpustakaan py-cachify ke dalam aplikasi FastAPI menggunakan SQLModel dan Redis untuk melaksanakan kawalan caching dan concurrency.

Jadual Kandungan:

  • Pengenalan
  • Persediaan Projek
  • Mencipta Model Pangkalan Data dengan SQLModel
  • Membina Titik Tamat FastAPI
  • Caching Keputusan Titik Akhir
  • Mengunci Pelaksanaan Titik Tamat Kemas Kini
  • Menjalankan Aplikasi
  • Kesimpulan

pengenalan

Caching ialah teknik yang berkuasa untuk meningkatkan prestasi aplikasi web dengan menyimpan hasil operasi yang mahal dan menyediakannya daripada storan akses pantas. Dengan py-cachify, kami boleh menambah caching dengan lancar pada aplikasi FastAPI kami, menggunakan Redis untuk storan. Selain itu, py-cachify menyediakan alat untuk kawalan serentak, menghalang keadaan perlumbaan semasa operasi kritikal.

Dalam tutorial ini, kami akan meneruskan penyediaan perpustakaan py-cachify dalam aplikasi FastAPI dengan SQLModel untuk ORM dan Redis untuk caching.

Persediaan Projek

Mari mulakan dengan menyediakan persekitaran projek kami.

Prasyarat

  • Python 3.12
  • Puisi (anda boleh menggunakan mana-mana pengurus pakej yang anda suka)
  • Pelayan Redis berjalan secara setempat atau boleh diakses dari jauh

Pasang Ketergantungan

Mulakan projek baharu melalui puisi:

# create new project
poetry new --name app py-cachify-fastapi-demo

# enter the directory
cd py-cachify-fastapi-demo

# point poetry to use python3.12
poetry env use python3.12

# add dependencies
poetry add "fastapi[standard]" sqlmodel aiosqlite redis py-cachify
  • FastAPI: Rangka kerja web untuk membina API kami.
  • SQLModel aiosqlite: Menggabungkan SQLAlchemy dan Pydantic untuk ORM dan pengesahan data.
  • Redis: Pelanggan Python untuk berinteraksi dengan Redis.
  • py-cachify: Caching dan mengunci utiliti.

Memulakan py-cachify

Sebelum kami boleh menggunakan py-cachify, kami perlu memulakannya dengan pelanggan Redis kami. Kami akan melakukan ini menggunakan parameter jangka hayat FastAPI.

# app/main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from py_cachify import init_cachify
from redis.asyncio import from_url


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        # Replace with your redis url if it differs
        async_client=from_url('redis://localhost:6379/0'),
    )
    yield


app = FastAPI(lifespan=lifespan)

Di dalam jangka hayat, kami:

  • Buat pelanggan Redis tak segerak.
  • Mulakan py-cachify dengan pelanggan ini.

Mencipta Model Pangkalan Data dengan SQLModel

Kami akan mencipta model Pengguna yang mudah untuk berinteraksi dengan pangkalan data kami.

# app/db.py
from sqlmodel import Field, SQLModel


class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    name: str
    email: str

Sediakan enjin pangkalan data dan buat jadual dalam fungsi jangka hayat:

# app/db.py

# Adjust imports
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine


# Add the following at the end of the file
sqlite_file_name = 'database.db'
sqlite_url = f'sqlite+aiosqlite:///{sqlite_file_name}'
engine = create_async_engine(sqlite_url, echo=True)
session_maker = async_sessionmaker(engine)


# app/main.py
# Adjust imports and lifespan function
from sqlmodel import SQLModel

from .db import engine


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        async_client=from_url('redis://localhost:6379/0'),
    )
    # Create SQL Model tables
    async with engine.begin() as conn:
        await conn.run_sync(SQLModel.metadata.create_all)

    yield

Nota: Kami menggunakan SQLite untuk kesederhanaan, tetapi anda boleh menggunakan mana-mana pangkalan data yang disokong oleh SQLAlchemy.

Membina Titik Akhir FastAPI

Mari kita buat titik akhir untuk berinteraksi dengan model Pengguna kami.

# create new project
poetry new --name app py-cachify-fastapi-demo

# enter the directory
cd py-cachify-fastapi-demo

# point poetry to use python3.12
poetry env use python3.12

# add dependencies
poetry add "fastapi[standard]" sqlmodel aiosqlite redis py-cachify

Caching Keputusan Titik Akhir

Sekarang, mari kita cache hasil titik akhir read_user untuk mengelakkan pertanyaan pangkalan data yang tidak perlu.

Kod titik akhir akan kelihatan seperti ini:

# app/main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from py_cachify import init_cachify
from redis.asyncio import from_url


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        # Replace with your redis url if it differs
        async_client=from_url('redis://localhost:6379/0'),
    )
    yield


app = FastAPI(lifespan=lifespan)

Dengan penghias @cached:

  • Kami menentukan kunci unik menggunakan user_id.
  • Tetapkan TTL (masa untuk hidup) kepada 5 minit (300 saat).
  • Panggilan berikutnya ke titik akhir ini dengan user_id yang sama dalam masa 5 minit akan mengembalikan hasil cache.

Menetapkan Semula Cache pada Kemas Kini

Apabila data pengguna dikemas kini, kami perlu menetapkan semula cache untuk memastikan pelanggan menerima maklumat terkini. Untuk merealisasikannya, mari ubah suai titik akhir pengguna_update.

# app/db.py
from sqlmodel import Field, SQLModel


class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    name: str
    email: str

Dengan memanggil read_user.reset(user_id=user_id), kami:

  • Kosongkan data cache untuk user_id tertentu.
  • Pastikan permintaan GET berikutnya mengambil data baharu daripada pangkalan data.

Di bawahnya, penghias cache membungkus fungsi anda secara dinamik, sambil menambahkan kaedah .set semula. Kaedah ini meniru tandatangan fungsi dan taip, dengan cara ini ia akan sama ada segerak atau tidak segerak bergantung pada fungsi asal dan akan menerima hujah yang sama.

Kaedah .reset menggunakan logik penjanaan kunci yang sama yang ditakrifkan dalam penghias cache untuk mengenal pasti entri cache mana yang akan dibatalkan. Contohnya, jika corak kunci caching anda ialah user-{user_id}, panggilan await read_user.reset(user_id=123) secara khusus akan menyasarkan dan memadamkan entri cache untuk user_id=123.

Mengunci Pelaksanaan Titik Akhir Kemas Kini

Untuk mengelakkan keadaan perlumbaan semasa kemas kini, kami akan menggunakan penghias sekali untuk mengunci pelaksanaan titik akhir kemas kini.

# app/db.py

# Adjust imports
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine


# Add the following at the end of the file
sqlite_file_name = 'database.db'
sqlite_url = f'sqlite+aiosqlite:///{sqlite_file_name}'
engine = create_async_engine(sqlite_url, echo=True)
session_maker = async_sessionmaker(engine)


# app/main.py
# Adjust imports and lifespan function
from sqlmodel import SQLModel

from .db import engine


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        async_client=from_url('redis://localhost:6379/0'),
    )
    # Create SQL Model tables
    async with engine.begin() as conn:
        await conn.run_sync(SQLModel.metadata.create_all)

    yield

Dengan sekali:

  • Kami mengunci fungsi berdasarkan user_id.
  • Jika permintaan lain cuba mengemas kini pengguna yang sama secara serentak, ia akan segera mengembalikan respons dengan 226 IM Digunakan kod status.
  • Ini menghalang kemas kini serentak yang boleh mengakibatkan data tidak konsisten.

Secara pilihan, anda boleh mengkonfigurasi @sekali untuk menaikkan pengecualian atau mengembalikan nilai tertentu jika kunci sudah diperoleh.

Menjalankan Aplikasi

Kini tiba masanya untuk menjalankan dan menguji apl kami!

1) Mulakan Pelayan Redis:

Pastikan pelayan Redis anda berjalan secara setempat atau boleh diakses dari jauh. Anda boleh memulakan pelayan Redis tempatan menggunakan Docker:

# app/main.py

# Adjust imports
from fastapi import Depends, FastAPI
from sqlalchemy.ext.asyncio import AsyncSession

from .db import User, engine, session_maker


# Database session dependency
async def get_session():
    async with session_maker() as session:
        yield session


app = FastAPI(lifespan=lifespan)


@app.post('/users/')
async def create_user(user: User, session: AsyncSession = Depends(get_session)) -> User:
    session.add(user)
    await session.commit()
    await session.refresh(user)
    return user


@app.get('/users/{user_id}')
async def read_user(user_id: int, session: AsyncSession = Depends(get_session)) -> User | None:
    return await session.get(User, user_id)


@app.put('/users/{user_id}')
async def update_user(user_id: int, new_user: User, session: AsyncSession = Depends(get_session)) -> User | None:
    user = await session.get(User, user_id)
    if not user:
        return None

    user.name = new_user.name
    user.email = new_user.email

    session.add(user)
    await session.commit()
    await session.refresh(user)

    return user

2) Jalankan Aplikasi FastAPI:

Dengan semua yang disediakan, anda boleh melancarkan aplikasi FastAPI anda menggunakan Puisi. Navigasi ke direktori akar projek anda dan laksanakan arahan berikut:

# app/main.py

# Add the import
from py_cachify import cached


@app.get('/users/{user_id}')
@cached('read_user-{user_id}', ttl=300)  # New decorator
async def read_user(user_id: int, session: AsyncSession = Depends(get_session)) -> User | None:
    return await session.get(User, user_id)

3) Menguji dan Bermain dengan Caching dan Mengunci:

Caching: Tambahkan kelewatan (cth., menggunakan asyncio.sleep) dalam fungsi read_user untuk mensimulasikan pengiraan yang berjalan lama. Perhatikan bagaimana masa tindak balas bertambah baik secara drastik sebaik sahaja keputusan dicache.

Contoh:

# create new project
poetry new --name app py-cachify-fastapi-demo

# enter the directory
cd py-cachify-fastapi-demo

# point poetry to use python3.12
poetry env use python3.12

# add dependencies
poetry add "fastapi[standard]" sqlmodel aiosqlite redis py-cachify

Keselarasan dan Penguncian: Begitu juga, perkenalkan kelewatan dalam fungsi kemas kini_pengguna untuk memerhatikan gelagat kunci apabila percubaan kemas kini serentak dibuat.

Contoh:

# app/main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from py_cachify import init_cachify
from redis.asyncio import from_url


@asynccontextmanager
async def lifespan(_: FastAPI):
    init_cachify(
        # Replace with your redis url if it differs
        async_client=from_url('redis://localhost:6379/0'),
    )
    yield


app = FastAPI(lifespan=lifespan)

Kelewatan ini boleh membantu anda melihat keberkesanan mekanisme caching dan penguncian dalam tindakan, kerana bacaan berikutnya seharusnya lebih cepat disebabkan oleh caching, dan penulisan serentak ke sumber yang sama harus diurus dengan berkesan melalui penguncian.

Kini, anda boleh menguji titik akhir anda menggunakan alat seperti Posmen atau dengan pergi ke http://127.0.0.1:8000/docs (apabila apl sedang berjalan!), dan memerhatikan peningkatan prestasi dan kawalan serentak dalam tindakan.

Selamat mencuba dengan apl FastAPI anda yang dipertingkatkan!

Kesimpulan

Dengan menyepadukan py-cachify ke dalam aplikasi FastAPI kami, kami telah membuka kunci banyak manfaat yang meningkatkan prestasi dan kebolehpercayaan API kami.

Mari kita imbas semula beberapa kekuatan utama:

  • Prestasi Dipertingkat: Caching panggilan fungsi berulang mengurangkan pengiraan berlebihan dan hits pangkalan data, meningkatkan masa tindak balas secara drastik.
  • Kawalan Concurrency: Dengan mekanisme penguncian terbina dalam, py-cachify menghalang keadaan perlumbaan dan memastikan ketekalan data — penting untuk aplikasi dengan akses serentak yang tinggi.
  • Fleksibiliti: Sama ada anda bekerja dengan operasi segerak atau tak segerak, py-cachify menyesuaikan diri dengan lancar, menjadikannya pilihan yang serba boleh untuk aplikasi web moden.
  • Kemudahan Penggunaan: Pustaka disepadukan dengan lancar dengan rangka kerja Python yang popular seperti FastAPI, membolehkan anda bermula dengan geseran yang minimum.
  • Anotasi Jenis Penuh: py-cachify beranotasi taip sepenuhnya, membantu dalam penulisan kod yang lebih baik dan lebih boleh diselenggara dengan usaha yang minimum.
  • Persediaan Minimum: Seperti yang ditunjukkan dalam tutorial ini, menambah py-cachify memerlukan hanya beberapa baris tambahan di atas persediaan sedia ada anda untuk memanfaatkan keupayaannya sepenuhnya.

Bagi mereka yang ingin meneroka lebih lanjut, lihat repositori GitHub py-cachify dan dokumentasi rasmi untuk mendapatkan panduan, tutorial dan contoh yang lebih mendalam.

Anda boleh mengakses kod penuh untuk tutorial ini di GitHub di sini. Jangan ragu untuk mengklonkan repositori dan bermain-main dengan pelaksanaan yang sesuai dengan keperluan projek anda.

Jika anda mendapati py-cachify bermanfaat, pertimbangkan untuk menyokong projek dengan memberikannya bintang di GitHub! Sokongan anda membantu memacu peningkatan lanjut dan ciri baharu.

Selamat mengekod!

Atas ialah kandungan terperinci Maksimumkan Kecekapan FastAPI Anda: Pelaksanaan Caching dan Penguncian yang Sangat Pantas dengan py-cachify. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1488
72
Polimorfisme dalam kelas python Polimorfisme dalam kelas python Jul 05, 2025 am 02:58 AM

Polimorfisme adalah konsep teras dalam pengaturcaraan berorientasikan objek Python, merujuk kepada "satu antara muka, pelbagai pelaksanaan", yang membolehkan pemprosesan bersatu pelbagai jenis objek. 1. Polimorfisme dilaksanakan melalui penulisan semula kaedah. Subkelas boleh mentakrifkan semula kaedah kelas induk. Sebagai contoh, kaedah bercakap () kelas haiwan mempunyai pelaksanaan yang berbeza dalam subkelas anjing dan kucing. 2. Penggunaan praktikal polimorfisme termasuk memudahkan struktur kod dan meningkatkan skalabilitas, seperti memanggil kaedah cabutan () secara seragam dalam program lukisan grafik, atau mengendalikan tingkah laku umum watak -watak yang berbeza dalam pembangunan permainan. 3. Polimorfisme pelaksanaan Python perlu memenuhi: Kelas induk mentakrifkan kaedah, dan kelas kanak -kanak mengatasi kaedah, tetapi tidak memerlukan warisan kelas induk yang sama. Selagi objek melaksanakan kaedah yang sama, ini dipanggil "jenis itik". 4. Perkara yang perlu diperhatikan termasuk penyelenggaraan

Terangkan penjana python dan iterators. Terangkan penjana python dan iterators. Jul 05, 2025 am 02:55 AM

Iterator adalah objek yang melaksanakan kaedah __iter __ () dan __Next __ (). Penjana adalah versi Iterator yang dipermudahkan, yang secara automatik melaksanakan kaedah ini melalui kata kunci hasil. 1. Iterator mengembalikan elemen setiap kali dia memanggil seterusnya () dan melemparkan pengecualian berhenti apabila tidak ada lagi elemen. 2. Penjana menggunakan definisi fungsi untuk menghasilkan data atas permintaan, menjimatkan memori dan menyokong urutan tak terhingga. 3. Menggunakan Iterator apabila memproses set sedia ada, gunakan penjana apabila menghasilkan data besar secara dinamik atau penilaian malas, seperti garis pemuatan mengikut baris apabila membaca fail besar. NOTA: Objek yang boleh diperolehi seperti senarai bukanlah pengaliran. Mereka perlu dicipta semula selepas pemalar itu sampai ke penghujungnya, dan penjana hanya boleh melintasi sekali.

Cara Mengendalikan Pengesahan API di Python Cara Mengendalikan Pengesahan API di Python Jul 13, 2025 am 02:22 AM

Kunci untuk menangani pengesahan API adalah untuk memahami dan menggunakan kaedah pengesahan dengan betul. 1. Apikey adalah kaedah pengesahan yang paling mudah, biasanya diletakkan dalam tajuk permintaan atau parameter URL; 2. BasicAuth menggunakan nama pengguna dan kata laluan untuk penghantaran pengekodan Base64, yang sesuai untuk sistem dalaman; 3. OAuth2 perlu mendapatkan token terlebih dahulu melalui client_id dan client_secret, dan kemudian bawa bearertoken dalam header permintaan; 4. Untuk menangani tamat tempoh token, kelas pengurusan token boleh dikemas dan secara automatik menyegarkan token; Singkatnya, memilih kaedah yang sesuai mengikut dokumen dan menyimpan maklumat utama adalah kunci.

Terangkan pernyataan Python. Terangkan pernyataan Python. Jul 07, 2025 am 12:14 AM

Menegaskan adalah alat pernyataan yang digunakan dalam Python untuk menyahpepijat, dan melemparkan pernyataan apabila keadaan tidak dipenuhi. Sintaksnya adalah menegaskan keadaan ditambah maklumat ralat pilihan, yang sesuai untuk pengesahan logik dalaman seperti pemeriksaan parameter, pengesahan status, dan lain -lain, tetapi tidak boleh digunakan untuk pemeriksaan input keselamatan atau pengguna, dan harus digunakan bersamaan dengan maklumat yang jelas. Ia hanya tersedia untuk debugging tambahan dalam peringkat pembangunan dan bukannya menggantikan pengendalian pengecualian.

Cara Menghidupkan Dua Senarai Sekali Python Cara Menghidupkan Dua Senarai Sekali Python Jul 09, 2025 am 01:13 AM

Kaedah yang sama untuk melintasi dua senarai secara serentak dalam Python adalah menggunakan fungsi zip (), yang akan memasangkan beberapa senarai dalam rangka dan menjadi yang paling singkat; Jika panjang senarai tidak konsisten, anda boleh menggunakan itertools.zip_longest () untuk menjadi yang paling lama dan mengisi nilai yang hilang; Digabungkan dengan penghitungan (), anda boleh mendapatkan indeks pada masa yang sama. 1.Zip () adalah ringkas dan praktikal, sesuai untuk lelaran data berpasangan; 2.zip_longest () boleh mengisi nilai lalai apabila berurusan dengan panjang yang tidak konsisten; 3.enumerate (zip ()) boleh mendapatkan indeks semasa traversal, memenuhi keperluan pelbagai senario kompleks.

Apakah Iterator Python? Apakah Iterator Python? Jul 08, 2025 am 02:56 AM

Inpython, iteratorsareObjectsThatallowLoopingthroughCollectionsByImplementing__iter __ () dan__Next __ ()

Apakah petunjuk jenis python? Apakah petunjuk jenis python? Jul 07, 2025 am 02:55 AM

TypehintsinpythonsolvetheproblemofambiguityandpotentialbugsindynamiciallytypodeByallowingDeveloperStospecifyExpectedTypes.theyenhancereadability, enablearlybugdetection, andimprovetoLiaSareAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeAdeSareadDeSareadDeSareadDeSareadDeSaread

Tutorial Python Fastapi Tutorial Python Fastapi Jul 12, 2025 am 02:42 AM

Untuk mewujudkan API moden dan cekap menggunakan Python, FastAPI disyorkan; Ia berdasarkan kepada jenis python standard yang diminta dan secara automatik dapat menghasilkan dokumen, dengan prestasi yang sangat baik. Selepas memasang FastAPI dan Asgi Server UVicorn, anda boleh menulis kod antara muka. Dengan menentukan laluan, menulis fungsi pemprosesan, dan data yang kembali, API boleh dibina dengan cepat. FastAPI menyokong pelbagai kaedah HTTP dan menyediakan sistem dokumentasi Swaggersui dan Redoc yang dihasilkan secara automatik. Parameter URL boleh ditangkap melalui definisi laluan, manakala parameter pertanyaan boleh dilaksanakan dengan menetapkan nilai lalai untuk parameter fungsi. Penggunaan rasional model Pydantic dapat membantu meningkatkan kecekapan dan ketepatan pembangunan.

See all articles