我有一个 FastAPI 端点,它启动一些长时间运行的后台任务:
background_tasks.add_task(fn())
这些任务最多可能需要 10 小时才能完成。
我正在使用
gunicorn
在 Docker 容器内运行它:
# Start the application
CMD exec gunicorn --bind :$PORT --workers 1 -k uvicorn.workers.UvicornWorker --threads 8 --timeout 0 main:app
当我启动容器并从我的计算机上的 Postman 访问端点时,任务就会启动,并且在运行时,它们会正常完成。
我现在使用 Google Cloud Run 来托管我的容器。当我调用端点(
XXX.run.app
)时,任务似乎也根据日志启动,但它们似乎停止了,稍后服务将重新启动。
我尝试将请求超时增加到最大值,但这没有帮助。还有什么我可以尝试的吗?
您的设计并不符合您的期望。您将“实时 API”与 fastAPI 混合在一起,并在后台长时间运行批处理。
2 种行为,2 种服务 -> 关注点分离。