编程语言
首页 > 编程语言> > 如何处理python worker中长时间运行的请求?

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

作者:互联网

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

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

如何处理呢?您可以提出一些建议吗? nginx fcgi或wsgi或其他?羟基吗?如您所见,我是python,反向代理等领域的新手.我只需要有关体系结构(和数据流)的起点

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

解决方法:

看起来您需要“工作人员”是独立的进程(至少其中一些),因此也可能使它们成为所有独立的进程,而不是将线程分成数个进程. Python 2.6和更高版本的标准库中的multiprocessing模块提供了良好的功能,可以生成一个进程池并通过FIFO“队列”与它们进行通信.如果由于某种原因您仍然使用Python 2.5或更早版本,则可以下载PyPi存储库中的多处理版本,并与这些旧版本的Python一起使用.

可以而且应该很容易地使“前端”与WSGI(使用Apache或Nginx)一起运行,并且它可以通过多处理处理往返于工作进程的所有通信,而无需使用HTTP,代理等.系统的该部分;仅前端本身就是一个Web应用程序,工作人员只是按照前端的要求接收,处理和响应工作单元.在我看来,这是最合理,最简单的架构.

第三方软件包中还有其他适用于Python的分布式处理方法,但是多处理相当不错,并且具有成为标准库的一部分的优势,因此,在没有其他特殊限制或约束的情况下,我建议您使用多处理.

标签:nginx,wsgi,load-balancing,reverse-proxy,python
来源: https://codeday.me/bug/20191024/1919850.html