使用eventlet处理大量数据返回的大量https请求

时间:2015-12-24 15:59:27

标签: json xml eventlet

我正在尝试使用eventlet来处理大量的数据请求。一次向远程服务器发出100,000个请求,每个请求应生成10k-15k字节的JSON响应。我必须解码JSON,然后执行一些数据转换(一些字段名称更改,一些简单的转换,如英语 - >指标,但有一些需要轻微的解析),并将所有100,000个请求作为XML发送到后端遗留系统预期的格式。我使用了eventlet示例中的代码,它使用了imap()"用于pool.imap(fetch,urls)中的body:....&#34 ;;轻微修改。到目前为止,eventlet在一个小样本(5K url)上运行良好,可以获取JSON数据。我的问题是我是否应该将非I / O处理(JSON解码,字段转换,XML编码)添加到" fetch()"函数使得所有变换处理都发生在greenthread中,或者我应该在greenthread中做最小的工作,返回原始响应体,并在"中为body.imap()中的主体进行主处理:& #34;环?我担心如果我执行后者,来自已完成线程的数据量将开始累积,并且会使内存膨胀,而前者实际上会将进程限制在XML输出将跟上的位置。建议作为实施此欢迎的首选方法。哦,这最终将每小时耗尽一次,所以它确实有一个时间窗口,它必须适应。谢谢!

1 个答案:

答案 0 :(得分:0)

理想情况下,您将每个数据处理操作放入单独的绿色线程中。然后,仅在需要时,将多个操作组合成批处理或使用池来限制并发。

当您在一个循环中执行非IO绑定处理时,基本上您将并发性限制为1个同时执行的任务。但您可以使用eventlet.tpool模块中的(OS)线程池并行运行它们。

只有在运行了太多并行CPU绑定代码时才会阻止并发。