python - 如何处理 python worker 中长时间运行的请求?

标签 python nginx load-balancing wsgi reverse-proxy

我有一个 python(嗯,现在是 php,但我们正在重写)函数,它接受一些参数(A 和 B)并计算一些结果(在图中找到从 A 到 B 的最佳路径,图是只读的),在典型情况下,一次调用需要 0.1 秒到 0.9 秒才能完成。用户可以将此功能作为简单的 REST 网络服务访问 (GET bestpath.php?from=A&to=B)。当前的实现非常愚蠢——它是一个简单的 php 脚本+apache+mod_php+APC,每个请求都需要加载所有数据(在 php 数组中超过 12MB),创建所有结构,计算路径并退出。我想改变它。

我想要一个有 N 个独立工作人员的设置(每台服务器 X 有 Y 服务器),每个工作人员都是一个循环运行的 python 应用程序(获取请求 -> 处理 -> 发送回复 -> 获取请求...),每个worker 一次可以处理一个请求。我需要一些可以充当前端的东西:从用户那里获取请求,管理请求队列(具有可配置的超时)并一次为我的员工提供一个请求。

如何解决这个问题?你能提出一些设置吗? nginx + fcgi 或 wsgi 或其他东西?代理?如您所见,我是 Python、反向代理等方面的新手。我只需要一个关于架构(和数据流)的起点

顺便说一句。工作人员正在使用只读数据,因此无需维护他们之间的锁定和通信

最佳答案

在 Python 中使用线程处理这种排列的典型方法是使用标准库模块 Queue .可以在此处找到使用队列模块管理工作人员的示例:Queue Example

关于python - 如何处理 python worker 中长时间运行的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1674696/

相关文章:

python - 通过 dns 连接时 Nginx 未正确返回 html 模板

java - Apache Helix 资源平衡器(案例 : each resource on independent node)

Python:如何使 cmd.Cmd() 在文件名中使用连字符?

Python:缩进错误

python - 在 Id 和年份上合并两个数据框 pandas,其中年份缺少值

Python:如何搜索和替换 json 文件的部分内容?

nginx - 关于 nginx location/{} 和 location = {} 的优先级

angular - Docker/Angular4/Nginx

wcf - 使用 NLB 在 IIS 中托管自定义 WCF

Go:使用默认 RPC 包进行负载平衡?