我有一个 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/