Flask Gunicorn——预加载选项导致工人被吊死?

Flask Gunicorn——预加载选项导致工人被吊死?,flask,gunicorn,preload,Flask,Gunicorn,Preload,我们有一个flask应用程序,它对ML模型使用了大量内存,我正试图通过使用gunicorn的preload选项来减少内存占用,但当我添加--preload标志,并将其部署到运行在GKE上的docker容器中时,它将只处理少量请求,然后一直挂到它超时,这时gunicorn将启动另一个工人来替换它,同样的事情也会发生。目前还不清楚每个工作人员在挂起之前将处理多少个请求(可能只有1个…可能有几个) 超时时间超过10分钟,因此它似乎无限期地挂起 如果删除--preload标志,则根本不会发生这种情况 -

我们有一个flask应用程序,它对ML模型使用了大量内存,我正试图通过使用gunicorn的
preload
选项来减少内存占用,但当我添加
--preload
标志,并将其部署到运行在GKE上的docker容器中时,它将只处理少量请求,然后一直挂到它超时,这时gunicorn将启动另一个工人来替换它,同样的事情也会发生。目前还不清楚每个工作人员在挂起之前将处理多少个请求(可能只有1个…可能有几个)

超时时间超过10分钟,因此它似乎无限期地挂起

如果删除
--preload
标志,则根本不会发生这种情况


--preload
标志有什么可能导致工作人员无限期挂起?

对此我没有明确的答案,但我相信它一定与线程不安全的代码有关。启用此选项后,某些端点可以正常工作,但其他端点挂起,可能是由于某些非线程安全代码。我还没有缩小缺陷的范围,但我认为这可能有助于其他人解决类似的问题,因为我参考的资源中没有太多提到代码不具有线程安全性的可能性。您发现了潜在的问题吗?我遇到了可能相关的问题,我的变量没有初始化,可能是因为它们在一个单独的线程中初始化。我从来没有找出这个问题的根源。我仍然相信这只是代码中的某种线程安全问题,但我没有深入研究它以发现什么。