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()
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)
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)
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)
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!