我正在使用 Flask 、 UWSGI 和 Nginx 运行应用程序。我的 UWSGI 设置为生成 4 个并行进程来同时处理多个请求。现在,我有一个请求需要花费大量时间,并且会更改有关应用程序的重要数据。因此,当一个 UWSGI 进程正在处理该请求并说所有其他进程也很忙时,第五个请求将不得不等待。这里的问题是我无法更改此请求以在离线模式下运行,因为它会更改重要数据并且用户不能简单地保持未知状态。处理这种情况的最佳方法是什么?
最佳答案
作为一个选项,您可以执行以下操作:
- 将繁重的逻辑与正在调用的函数分开 在 @route 上并将其移动到一个单独的位置(一个文件,另一个 功能等)
- 引入 Celery 来运行那些繁重的逻辑 (它将在与 @route 修饰的函数不同的线程中进行处理)。 实现此目的的一种快速方法是使用 Redis 作为消息代理。
- 从@route-decorated中安排耗时的函数 Celery 中的函数(也可以传递参数)
这样,在整个函数执行时间内,HTTP 请求就不会被阻止。
关于python - 在 Flask-UWSGI 应用程序中处理耗时的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38072956/