并行运行一系列函数来回答HTTP请求

时间:2011-11-21 05:59:40

标签: python http parallel-processing gevent

我已经尝试了各种方法,并希望看到你们认为在Python中解决这个问题的最佳方法。

基本上,我有一个Web服务接受提供单个查询术语的请求,并继续与该术语并行执行一系列计算。这些计算可以被认为是单独的函数调用。

我的想法是,只要请求进入,我就会异步调用函数,并保持请求直到结果开始流入。

从我的研究来看,似乎使用像gevent这样的库可能是最好的方法,尽管我还不完全熟悉greenlets。此外,似乎为了完成我正在寻找的功能类型(结果将在可用时通过长请求发送回客户端),我需要使用支持此功能的特殊类型的StreamServer。响应本身只是前端的JavaScript模块读取的JSON对象,后者将更新UI组件,因为它们会被发送回浏览器。

这样做的最佳方法是什么?使用像gevent这样的东西是否有意义,或者是否应该使用协同例程来实现它而不需要库的帮助?我相信这是过去很多人已经做了很多事情,我想收集一些建议。

非常感谢,如果您想了解更多细节,请告诉我,我期待听到您的建议!

1 个答案:

答案 0 :(得分:0)

假设您所说的“计算”不受CPU约束,gevent对于那种事情会很棒。您的请求处理程序可能如下所示:

def handle_request(request):
    ...
    pool = gevent.pool.Group()
    results = group.map(do_computation, input_data)
    return results

如果它们受CPU限制,那么你需要考虑multiprocessing,因为在单一操作系统进程中,当涉及到CPU绑定任务时,Python通常很差。