Estoy creando una aplicación local. Me gustaría poder apagar el servidor desde una llamada api, pero no tengo éxito.
Aquí hay algo de código:
# q.py from multiprocessing import Queue q = Queue() def stop_server(*args, **kwargs): q.put("EXTERMINATE") # app.py app = FastAPI() @app.get("/kill") def index(background_tasks: BackgroundTasks): background_tasks.add_task(stop_server) return {"killed": True} # main.py from q import q def start_server(): uvicorn.run(app="app:app", host="127.0.0.1", port=8080) if __name__ == "__main__": server = Process(target=start_server) server.start() # sleep(5) # q.put("EXTERMINATE") # sleep(3) while True: msg = q.get() if msg == "EXTERMINATE": while server.is_alive(): server.terminate() sleep(0.1) server.join(timeout=1) q.close() breakAcceder a "127.0.0.1:8080/kill" no hace nada.
Hay un bloque comentado que coloca manualmente un mensaje en la cola. Si quita el comentario del código, debería ver que el servidor finalizó correctamente.
Entonces, ¿cómo podría acceder a la cola desde dentro de un controlador fastapi?