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.
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 [url=viewtopic.php?t=20324]Problem[/url] 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, [b] Worker_Shutdown [/b] mit [b] Threading [/b] in einen separaten Thread zu verschieben.