方案:
我的服务器/应用程序需要处理多个并发请求,并且对于每个请求,服务器打开到另一个m / c的ssh链接,运行一个长命令并将结果发回。
1 HTTP请求到来→服务器启动1 SSH连接→等待很长时间→将SSH结果作为HTTP响应发回
这应该同时发生>实时200个HTTP和SSH连接。
解决方案:
服务器只需执行一项任务,即为每个HTTP请求打开SSH连接并保持连接打开。我甚至无法以异步方式编写代码,因为只有一个任务要做: SSH 。每个请求都会阻止IOLoop
。由于ssh任务长时间运行,回调和延迟函数不具有优势。使用事件驱动技术,线程听起来是唯一的出路。
我一直在使用Python中的龙卷风示例,但没有一个适合我的特殊需求:
gevent
/ eventlet
伪多线程环境:
Ubuntu 12.04,高RAM&净速度
注意: 我必须使用python进行编码,并且仅限于我的场景。在保持HTTP连接打开的同时打开多个SSH链接听起来都是异步工作,但我希望它看起来像一个同步活动。
答案 0 :(得分:0)
如果ssh
表示实际运行ssh进程,请尝试tornado.process.Subprocess
。如果你想要更多集成到服务器中的东西,twisted会有一个异步的ssh实现。如果您正在使用像paramiko这样的东西,那么线程可能是您最好的选择。