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

Bagaimana untuk Menjalankan Tugas Latar Belakang dalam FastAPI?

Susan Sarandon
Susan Sarandonasal
2024-12-18 12:03:18554semak imbas

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)

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

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)

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

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!

Kenyataan:
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