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.
Lebensdauer für Gunicorn -Arbeiter festlegen ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post