Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menjalankan Tugas Latar Belakang dalam FastAPI?

Bagaimana untuk Menjalankan Tugas Latar Belakang dalam FastAPI?

Susan Sarandon
Lepaskan: 2024-12-18 12:03:18
asal
553 orang telah melayarinya

How to Run Background Tasks in FastAPI?

Pelaksanaan Tugas Latar Belakang dalam FastAPI

Dalam FastAPI, pembangun mungkin menghadapi senario di mana mereka perlu menjalankan fungsi di latar belakang, tidak berkaitan dengan API mereka. Untuk mencapai matlamat ini, adalah perlu untuk menggunakan mekanisme belitan.

Penyelesaian 1: Memulakan Benang sebelum uvicorn.run

Satu pendekatan melibatkan memulakan utas sebelum menggunakan uvicorn.run, kerana uvicorn.run menghalang benang. Pendekatan ini boleh dilaksanakan seperti berikut:

import time
import threading
from fastapi import FastAPI
import uvicorn

app = FastAPI()
class BackgroundTasks(threading.Thread):
    def run(self,*args,**kwargs):
        while True:
            print('Hello')
            time.sleep(5)
  
if __name__ == '__main__':
    t = BackgroundTasks()
    t.start()
    uvicorn.run(app, host="0.0.0.0", port=8000)
Salin selepas log masuk

Sebagai alternatif, pembangun boleh memanfaatkan acara permulaan FastAPI untuk memulakan urutan sebelum aplikasi dimulakan:

@app.on_event("startup")
async def startup_event():
    t = BackgroundTasks()
    t.start()
Salin selepas log masuk

Penyelesaian 2: Acara Penjadual

Pilihan lain ialah melaksanakan pengulangan Penjadual acara untuk tugas latar belakang:

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

Penyelesaian 3: Menggunakan Gelung Acara

Untuk tugas latar belakang tak segerak (fungsi async def), pembangun boleh menggunakan semasa gelung peristiwa dengan fungsi asyncio.create_task():

from asyncio import create_task
from fastapi import FastAPI

app = FastAPI()

@app.on_event("startup")
async def startup_task():
    await create_task(print_task(5))
Salin selepas log masuk

Dalam pendekatan ini, gelung acara dibuat apabila memulakan pelayan uvicorn.

Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Tugas Latar Belakang 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan