处理多个HTTP连接和像SSH这样的重阻塞功能

时间:2014-05-08 09:24:16

标签: python multithreading concurrency tornado gevent

方案

我的服务器/应用程序需要处理多个并发请求,并且对于每个请求,服务器打开到另一个m / c的ssh链接,运行一个长命令并将结果发回。

1 HTTP请求到来→服务器启动1 SSH连接→等待很长时间→将SSH结果作为HTTP响应发回

这应该同时发生>实时200个HTTP和SSH连接。

解决方案

服务器只需执行一项任务,即为每个HTTP请求打开SSH连接并保持连接打开。我甚至无法以异步方式编写代码,因为只有一个任务要做: SSH 。每个请求都会阻止IOLoop。由于ssh任务长时间运行,回调和延迟函数不具有优势。使用事件驱动技术,线程听起来是唯一的出路。

我一直在使用Python中的龙卷风示例,但没有一个适合我的特殊需求:

  1. 带扭曲的龙卷风
  2. gevent / eventlet伪多线程
  3. python threads
  4. 建立HTTP服务器,如Apache
  5. 环境

    Ubuntu 12.04,高RAM&净速度

    注意: 我必须使用python进行编码,并且仅限于我的场景。在保持HTTP连接打开的同时打开多个SSH链接听起来都是异步工作,但我希望它看起来像一个同步活动。

1 个答案:

答案 0 :(得分:0)

如果ssh表示实际运行ssh进程,请尝试tornado.process.Subprocess。如果你想要更多集成到服务器中的东西,twisted会有一个异步的ssh实现。如果您正在使用像paramiko这样的东西,那么线程可能是您最好的选择。