Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menjalankan Pekerjaan Latar Belakang dengan Cekap dalam FastAPI?

Bagaimana untuk Menjalankan Pekerjaan Latar Belakang dengan Cekap dalam FastAPI?

DDD
Lepaskan: 2024-12-05 15:32:10
asal
719 orang telah melayarinya

How to Efficiently Run Background Jobs in FastAPI?

Kerja Latar Belakang dalam FastAPI: Menjalankan Fungsi Asynchronously

Dalam FastAPI, fungsi latar belakang diperlukan apabila anda ingin melakukan operasi tak segerak yang tidak sepatutnya menyekat atau menangguhkan operasi API utama. Mari kita terokai cara menyediakan kerja latar belakang dengan berkesan.

1. Tugas Latar Belakang Berasaskan Benang:

Memulakan utas ialah cara mudah untuk menjalankan fungsi di latar belakang:

def start_worker():
    print('[main]: starting worker...')
    my_worker = worker.Worker()
    my_worker.working_loop() # this function prints "hello" every 5 seconds

if __name__ == '__main__':
    print('[main]: starting...')
    uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)
    _worker_thread = Thread(target=start_worker, daemon=False)
    _worker_thread.start()
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini mempunyai had: ia menyekat utas utama daripada pelaksanaan. Untuk mengelakkan ini, mulakan urutan anda sebelum proses API utama seperti yang dilihat di bawah:

_worker_thread.start()
uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)
Salin selepas log masuk

2. Tugas Latar Belakang Berasaskan Acara:

Pilihan lain ialah menggunakan penjadual berasaskan acara:

import sched, time
from threading import Thread
from fastapi import FastAPI
import uvicorn

app = FastAPI()
s = sched.scheduler(time.time, time.sleep)

def print_event(sc): 
    print("Hello")
    sc.enter(5, 1, print_event, (sc,))

def start_scheduler():
    s.enter(5, 1, print_event, (s,))
    s.run()

@app.on_event("startup")
async def startup_event():
    thread = Thread(target=start_scheduler)
    thread.start()

if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=8000)
Salin selepas log masuk

3. Tugas Latar Belakang AsyncIO:

Jika fungsi latar belakang anda tidak segerak, anda boleh menggunakan fungsi asyncio.create_task():

from fastapi import FastAPI
from contextlib import asynccontextmanager
import asyncio


async def print_task(s): 
    while True:
        print('Hello')
        await asyncio.sleep(s)

        
@asynccontextmanager
async def lifespan(app: FastAPI):
    # Run at startup
    asyncio.create_task(print_task(5))
    yield
    # Run on shutdown (if required)
    print('Shutting down...')


app = FastAPI(lifespan=lifespan)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Pekerjaan Latar Belakang dengan Cekap dalam FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan