减少 IIS 中的 Flask-API 停机时间

问题描述 投票:0回答:1

我正在使用

waitress
IIS 10.0 中提供 Flask Python API,目的是为反向图像搜索提供端点服务。

脚本的初始部分处理导入多个“大文件”,例如“句子编码器”和包含数百万条目的数据索引。总共加载了大约 7.5GB 的辅助数据。 这意味着初始化过程通常需要大约 45 到 60 秒,之后 API 就可以使用了。 app.py 文件的结构类似于: # Import packages from flask import Flask, request, jsonify from flask_restful import Api from waitress import serve # Keras, Tensorflow, etc... # Start APP app = Flask(__name__) # Load resources # Neural Networks, Sentence Encoders, Lookup Indices... api = Api(app) # Define endpoints @app.route('/home', methods=['POST']) def home(): # Do something... # ... Other endpoints if __name__ = '__main__': serve(app)

我还有 

pinging
 服务每分钟都会用空白请求访问网站,以确保 API 保持在“温暖”状态(如本答案中
所建议的那样)

但是,我面临一个问题,IIS 似乎以看似随机的间隔回收应用程序池,导致下一个请求的处理时间异常长,并且经常导致超时。 我绝不是设置 IIS 的专家,但迄今为止我的研究引导我尝试:

IIS 应用程序初始化

增加超时限制

    将应用程序池设置更改为
  • AlwaysRunning
  • ,删除空闲超时限制,并禁用所有回收触发器。 (事实上,我基本上遵守
  • this
  • 最佳实践指南)
  • 在站点设置中将 Preload EnabledApplication Pool Settings 设置为 True。
  • 前面的步骤都没有带来任何明显的改进。然而,我也注意到,由于 API 重新启动,活动较少的时期往往会出现较少的中断。最终,这一发现使我相信问题可能与内存处理有关,但我仍然无法理解是否是这种情况。 接下来我可以尝试解决什么问题来了解问题的根源?有没有办法监控重启的时间和原因?这可能是硬件限制吗?

也许您可以尝试使用 Gunicorn 服务器,而不是让女服务员为应用程序提供服务,这可能有助于避免让您的应用程序与 Gunicorn 工作人员一起睡觉

python rest flask iis waitress
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.