Lebensdauer für Gunicorn -Arbeiter festlegen

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Lebensdauer für Gunicorn -Arbeiter festlegen

by Anonymous » 16 Apr 2025, 08:25

Wir haben ein Projekt auf Fastapi. Es ist immer noch sehr leicht beladen, daher bekommen wir nach ein paar Stunden der Inaktivität einen solchen Fehler. Alle möglichen Rezepte mit Pool_Recycle und Hinzufügen von Manipulationen zum Dekorateur der DB -Operationen helfen nicht. Ich beschloss, das Problem zu umgehen - um die Arbeiter jede Stunde auszuschalten. Ich habe das folgende Schema ausgestellt: < /p>
Main.py
import asyncio
from fastapi import FastAPI
from .workers import worker_shutdown

app = FastAPI()

@app.on_event("startup")
async def worker_lifetime():
loop = asyncio.get_event_loop()
loop.create_task(worker_shutdown())
< /code>
worker.py
import os
import signal
import asyncio
import random

async def worker_shutdown():
pid = os.getpid()
delay = 3600 + random.randint(2,60)
await asyncio.sleep(delay)
os.kill(pid, signal.SIGTERM)
< /code>
All dies funktioniert wie beabsichtigt. Die Frage ist nur, ist es richtig? Wird es unerwartete Probleme verursachen? Es gab auch eine Idee, Worker_Shutdown mit Threading in einen separaten Thread zu verschieben.

Top